我已经绞尽脑汁,也在 Stack Overflow 中进行了搜索,但我的问题似乎是另一个问题。或者也许是因为我是 Python 的新手。无论哪种方式,如果你能帮助我,我将永远感激不尽。我有一个 XML 文件,摘录如下,我需要解析每个元素及其子元素,并将它们保存在字典中。我已经尝试了很多东西,但是我得到了不同的错误,现在我束手无策了!
我在下面给出了 XML 文件和我的代码的一个版本(经过多次尝试和错误检索子元素的方法后剥离):
<nmwg:message>
<nmwg:parameters id="storeId">
<nmwg:parameter name="ID">NameA</nmwg:parameter>
</nmwg:parameters>
<!--Metadata and Data-->
<nmwg:metadata id="md1">
<nmwg:subject id="subject-port-A">
<nmwgtopo3:port id="urn:ogf:network:domaina.net:port:A">
<nmwgtopo3:name type="logical">portA</nmwgtopo3:name>
<nmwgtopo3:country>COUNTRY</nmwgtopo3:country> <!--Optional, can be left empty-->
<nmwgtopo3:city>CITY</nmwgtopo3:city> <!--Optional, can be left empty-->
<nmwgtopo3:institution>INSTITUTION</nmwgtopo3:institution> <!--Optional, can be left empty-->
<nmwgtopo3:latitude>LATITUDE</nmwgtopo3:latitude> <!--Optional, can be left empty-->
<nmwgtopo3:longitude>LONGTITUDE</nmwgtopo3:longitude> <!--Optional, can be left empty-->
</nmwgtopo3:port>
</nmwg:subject>
</nmwg:metadata>
<nmwg:data id="d1" metadataIdRef="md1">
<ifevt:datum timeType="ISO" timeValue="2006-12-04T16:43:38.0+0000">
<ifevt:ifInOctets>integer-number</ifevt:ifInOctets> <!--Integer number in bytes -->
<ifevt:ifOutOctets>integer-number</ifevt:ifOutOctets> <!--Integer number in bytes -->
</ifevt:datum>
</nmwg:data>
</nmwg:message>
这是我的代码:
from __future__ import print_function
from pprint import pprint
import ConfigParser, os
import xml.etree.ElementTree as ET
dataXMLFile = 'xmlFile.xml'
data = ET.parse (dataXMLFile)
root = data.getroot()
for child in root:
print ('Tag: ' + child.tag)
print ('Attrib: ' + str(child.attrib))
print()
domainId = data.findall('{http://ggf.org/ns/nmwg/base/2.0/}parameters/*')
for item in domainId:
print ('Tag: ' + item.tag)
print ('Attrib: ' + str(item.attrib))
print()
domainId = data.findall('{http://ggf.org/ns/nmwg/base/2.0/}metadata/*')
for item in domainId:
print ('Tag: ' + item.tag)
print ('Attrib: ' + str(item.attrib))
print()
domainId = data.findall('{http://ggf.org/ns/nmwg/base/2.0/}metadata/*/*')
for item in domainId:
print ('Tag: ' + item.tag)
print ('Attrib: ' + str(item.attrib))
print()
domainId = data.findall('{http://ggf.org/ns/nmwg/base/2.0/}metadata/*/*/*')
for item in domainId:
print ('Tag: ' + item.tag)
print ('Attrib: ' + str(item.attrib))
print()
我想解析 XML 文件,以便我可以portA
在<nmwgtopo3:name type="logical">
. 我试过了,但我只能从中得到type='logical'
一点。类似地,我想COUNTRY
从<nmwgtopo3:country>
、CITY
from <nmwgtopo3:city>
、 integer-number (这将是一个适当的整数值)中提取<ifevt:ifInOctets>
,等等。
我更喜欢坚持使用 ElementTree 而不是使用 3rd 方库,并希望您在我上面的问题中提供帮助。
谢谢,特鲁普斯特