2012-01-18 11 views
0

私はGPSデータを.tcxファイルとして保存しています。 これは(下のファイルの物乞い)xmlファイルであるpython 3.x xmlの解析はplistlibに似ていますか?

<?xml version="1.0" encoding="utf-8"?> 
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tp1="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpx="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"> 
    <Activities> 
     <Activity Sport="Other"> 
      <Id>2012-01-17T11:44:35Z</Id> 
      <Lap StartTime="2012-01-17T11:44:35Z"> 
       <TotalTimeSeconds>0</TotalTimeSeconds> 
       <DistanceMeters>0</DistanceMeters> 
       <Calories>0</Calories> 
       <Intensity>Active</Intensity> 
       <TriggerMethod>Manual</TriggerMethod> 
       <Track> 
        <Trackpoint> 
         <Time>2012-01-17T11:44:35Z</Time> 
         <Position> 
          <LatitudeDegrees>59.720211518183351</LatitudeDegrees> 

情報は、私は信じて<dictionary>タグ内にネストされたが、私が働いているだけで同じようなことは、同様の形式を使用するリンゴ.plistsされています。

次は私にネストされた辞書を与えるだろう...

import plistlib 
pl = plistlib.readPlist('/Users/name/Documents/file.plist') 

for sub_dict in pl: 
    print(sub_dict['keyA']) 
    print(sub_dict['keyD']) 
    print(sub_dict['keyE']) 
    print(sub_dict['keyG']) 

私はxml.dom.minidomでは、etreeとlxmlのを承知していますが、私はトラブルと同じ出力を得るためにどのようにワークアウトを持っています

上記のplistlibモジュールが私に与えます。

最終的な目的は、2つのデータセットの選択されたキーを一緒にマージすることです。一歩ずつ...

EDIT -----------------が

私が持っている何かの作業:

from xml.dom.minidom import parse 
doc = parse('/Users/name/Documents/GPS/gps.tcx') 
lat = doc.getElementsByTagName("LatitudeDegrees") 
time = doc.getElementsByTagName("Time") 

for x in lat: 
    print(x.firstChild.data) 
+0

は出力が見えるようになっている何? – unutbu

+0

文字列...?すなわち、 '' 59.920211518183351 ''と '2012-01-17T11:44:35Z' – beoliver

答えて

1

私が持っていました投稿されたXMLに終了タグを追加して、lxmlパーサーがそれを解析できるようにします。 これが完了すると、doc.xpathの呼び出しを使用して、TimeデータとLatitudeDegreesデータを引き出すことができます。

import lxml.etree as ET 
import io 

content='''<?xml version="1.0" encoding="utf-8"?> 
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tp1="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpx="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"> 
    <Activities> 
     <Activity Sport="Other"> 
      <Id>2012-01-17T11:44:35Z</Id> 
      <Lap StartTime="2012-01-17T11:44:35Z"> 
       <TotalTimeSeconds>0</TotalTimeSeconds> 
       <DistanceMeters>0</DistanceMeters> 
       <Calories>0</Calories> 
       <Intensity>Active</Intensity> 
       <TriggerMethod>Manual</TriggerMethod> 
       <Track> 
        <Trackpoint> 
         <Time>2012-01-17T11:44:35Z</Time> 
         <Position> 
          <LatitudeDegrees>59.920211518183351</LatitudeDegrees> 
</Position> 
</Trackpoint> 
</Track> 
</Lap> 
</Activity> 
</Activities> 
</TrainingCenterDatabase> 
''' 

doc = ET.fromstring(content) 

ns = {'ns':'http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2'} 
for trackpoint in doc.xpath('//ns:Trackpoint', namespaces = ns): 
    print(trackpoint.xpath('(ns:Time|ns:Position/ns:LatitudeDegrees)/text()', namespaces = ns)) 

利回り

['2012-01-17T11:44:35Z', '59.920211518183351'] 
+0

私はlxmlをインストールしているようです::)、申し訳ありません、xmlファイルの先頭を与えるだけです。私は次のようなものを試してみました...どうにかしてforループに入れてください... 'xml.dom.minidomからimport parse' 'doc = parse( '/ Users/name/Documents/GPS/gps.tcx ') '' print(doc.getElementsByTagName( "LatitudeDegrees")[1] .firstChild.data) ' – beoliver