我正在研究CityGML数据并尝试用Python解析CityGML。
为此,我使用了ElementTree,它适用于任何XML文件。但每当我尝试解析CItyGML文件时,我都无法获得任何结果。
作为一个例子,我想得到一个列表,其中包含名为" creationDate"的所有子标签。在CityGML文件中。 以下是代码:
import xml.etree.ElementTree as ET
tree = ET.parse('Gasometer.xml')
root = tree.getroot()
def child_list(child):
list_child = list(tree.iter(child))
return list_child
date = child_list('creationDate')
print (date)
我只得到一个空列表[]。
以下是CityGML文件的第一部分(" creationDate" -tag,最后可以找到):
<?xml version="1.0" encoding="UTF-8"?>
<CityModel>
<cityObjectMember>
<bldg:Building gml:id="UUID_899cac3f-e0b6-41e6-ae30-a91ce51d6d95">
<gml:description>Wohnblock in geschlossener Bauweise</gml:description>
<gml:boundedBy>
<gml:Envelope srsName="urn:ogc:def:crs,crs:EPSG::3068,crs:EPSG::5783" srsDimension="3">
<gml:lowerCorner>21549.6537889055 17204.3479916992 38.939998626709</gml:lowerCorner>
<gml:upperCorner>21570.6420902953 17225.660050148 60.6840192923434</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<creationDate>2014-03-28</creationDate>
这不仅在我尝试获取子标签列表时出现。我无法打印任何属性或标签名称。看起来我解析文件的方式是错误的。我希望有人可以帮我解决我的问题并告诉我应该做些什么!谢谢!
答案 0 :(得分:2)
由于这是一篇旧帖子,我将把它留在这里以防万一其他人可能需要它。 要解析CityGML,请尝试以下代码,它应该有助于大致了解如何获取信息。
import xml.etree.ElementTree as ET
def loadfile():
tree = ET.parse('filename')
root = tree.getroot()
for envelope in root.iter('{http://www.opengis.net/gml}Envelope'):
print "ENV tag", envelope.tag
print "ENV attrib", envelope.attrib
print "ENV text", envelope.text
lCorner = envelope.find('{http://www.opengis.net/gml}lowerCorner').text
uCorner = envelope.find('{http://www.opengis.net/gml}upperCorner').text
print "lC",lCorner
print "uC",uCorner
if __name__== "__main__":
loadfile()
要获取srsName,请尝试以下操作:
import xml.etree.ElementTree as ET
def loadfile():
tree = ET.parse('filename')
root = tree.getroot()
for envelope in root.iter('{http://www.opengis.net/gml}Envelope'):
key = envelope.attrib
srsName = key.get('srsName')
print "SRS Name: ", srsName
if __name__== "__main__":
loadfile()
我希望这可以帮助您或其他可能尝试使用ElementTree解析CityGML的人。