我有一个大小合适的XML文件,该文件是使用Python中的以下代码从monit的API中提取的。
file = urllib.request.urlopen(URL) #opening the XML URL
data = file.read()
file.close()
list.append(parsedXML, xmltodict.parse(data)) #Parsing to dict the XML file created
我使用XMLtoDICT将XML转换为字典,因为我认为这样会更容易搜索和提取。XMLtoDICT创建了一个嵌套的,有序的字典,这很棒。但是,我没有找到一种简单的方法来搜索python字典的每个“层”并提取出整个节点。
有没有一种简单的方法来搜索和拉出python中的字典节点以进行编辑?
例如,查看下面的XML。将其放入字典后,我需要提取以“ <service
”开头的每个节点(完整的XML文件中将有多个),然后在该确切节点上运行测试,并可能更改值。
我还将需要搜索字典中的所有值,找到一个值,然后获取该值的父节点名称并提取整个节点。那可能吗?
还是我应该完全跳过字典并直接使用XML?如果是这样,是否有一个支持所有这些功能的XML python库?
这是我提取的XML数据的示例:
<monit>
<server>
<id>9d8b2a3d3618ccc38628f6d7b89ebfd8</id>
<incarnation>1427714713</incarnation>
<version>5.4</version>
<uptime>44395</uptime>
<poll>120</poll>
<startdelay>0</startdelay>
<localhostname>DMZ-Server</localhostname>
<controlfile>/etc/monit/monitrc</controlfile>
<httpd>
<address>192.168.1.100</address>
<port>2812</port>
<ssl>0</ssl>
</httpd>
</server>
<platform>
<name>Linux</name>
<release>2.6.32-34-pve</release>
<version>#1 SMP Sat Nov 8 09:38:26 CET 2014</version>
<machine>i686</machine>
<cpu>8</cpu>
<memory>3145728</memory>
<swap>1048576</swap>
</platform>
<service type="3">
<name>mmonit</name>
<collected_sec>1427759050</collected_sec>
<collected_usec>180381</collected_usec>
<status>0</status>
<status_hint>0</status_hint>
<monitor>1</monitor>
<monitormode>0</monitormode>
<pendingaction>0</pendingaction>
<pid>11481</pid>
<ppid>1</ppid>
<uptime>692522</uptime>
<children>0</children>
任何树遍历算法都可以解决问题。
http://rosettacode.org/wiki/Tree_traversal#Python
我会坚持使用XML,并使用lxml解析和遍历XML树。
http://lxml.de/tutorial.html
http://lxml.de/tutorial.html#the-elementtree-class
我确信这里的其他人会建议较新的XML库,可以随时使用它们。LXML是我所熟悉的唯一一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句