一段時間以來,我一直在撞牆。根據文件,這應該是簡單的。我想要做的就是讀一個GPX文件。但是,GPX文件寬泛地使用命名空間,理論上是有意義的。不過,我似乎無法讓ElementTree閱讀它們。這是我想使用的代碼...使用Python ElementTree.register_namespace讀取GPX?
def loadGpx(self, sourceFile):
ElementTree.register_namespace('gpx', 'http://www.topografix.com/GPX/1/1')
eTree = ElementTree.ElementTree()
eTree.parse(sourceFile)
print eTree.findall('wpt')
從這樣的GPX文件拉出航點...
<?xml version="1.0" encoding="utf-8"?>
<gpx creator="Garmin Desktop App" version="1.1"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1
http://www.topografix.com/GPX/1/1/gpx.xsd
http://www.garmin.com/xmlschemas/WaypointExtension/v1
http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd
http://www.garmin.com/xmlschemas/TrackPointExtension/v1
http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd
http://www.garmin.com/xmlschemas/GpxExtensions/v3
http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd
http://www.garmin.com/xmlschemas/ActivityExtension/v1
http://www8.garmin.com/xmlschemas/ActivityExtensionv1.xsd
http://www.garmin.com/xmlschemas/AdventuresExtensions/v1
http://www8.garmin.com/xmlschemas/AdventuresExtensionv1.xsd"
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1"
xmlns:gpxtrx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
xmlns:abp="http://www.garmin.com/xmlschemas/ActivityExtension/v1"
xmlns:adv="http://www.garmin.com/xmlschemas/AdventuresExtensions/v1">
<metadata>
<link href="http://www.garmin.com">
<text>Garmin International</text>
</link>
<time>2012-01-17T03:21:12Z</time>
<bounds maxlat="45.708811283111572" maxlon="-121.3884991966188"
minlat="45.407062936574221" minlon="-121.54939779080451" />
</metadata>
<wpt lat="45.708682453259826" lon="-121.51224257424474">
<time>2012-01-06T19:00:02Z</time>
<name>1-State and First, start MHL</name>
<sym>Bike Trail</sym>
<extensions>
<gpxx:WaypointExtension>
<gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode>
</gpxx:WaypointExtension>
</extensions>
</wpt>
<wpt lat="45.615267734974623" lon="-121.43857721239328">
<time>2012-01-07T15:38:14Z</time>
<name>10-Right at fork staying on Huskey Rd</name>
<sym>Bike Trail</sym>
<extensions>
<gpxx:WaypointExtension>
<gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode>
</gpxx:WaypointExtension>
</extensions>
</wpt>
誠然,這將不僅僅是print eTree.findall('wpt')
多,但如果我可以得到那麼多,我以前使用過xml。這部分很容易。這個命名空間的東西,但是,讓我瘋狂。
我提前感謝你。這讓我瘋狂。
這非常有用,明確了'register_namespace()'實際上做了什麼。序列化,如果我正確理解,只有在創建輸出時纔有用。對於我所做的,似乎gpxpy的解析器模塊實際上可能是一個很好的起點。不過,謝謝你幫忙澄清這一點。再次,Stackoverflow向我展示了我需要如何繼續! – knu2xs