如何使用ElementTree解析XML文件并检索子元素

部队之星

我已经绞尽脑汁,还在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从中提取的<nmwgtopo3:city>整数(将是一个适当的整数值)<ifevt:ifInOctets>,依此类推。

我更喜欢坚持使用ElementTree而不使用第3方库,并且希望您对我的上述问题有所帮助。

谢谢,Trupsster

何塞·帕蒂尼奥(JoseL.Patiño)

您正在寻找的是lxml文档中iterparse / iterwalk文档。

使用iterparse实用程序功能,您可以迭代XML的元素,如下所示:

from lxml import etree
from cStringIO import StringIO

with open('your_file.xml', 'r') as f:
    context = etree.iterparse(StringIO(f.read()))

    for action, element in context:
        print('{0}:{1} {2}'.format(element.tag, element.attrib, element.text))

如果您在XML文件所在的任何位置运行该代码,则将看到类似于以下内容的输出:

parameter:{'name': 'ID'} NameA
parameters:{'id': 'storeId'}

name:{'type': 'logical'} portA
country:{} COUNTRY
city:{} CITY
institution:{} INSTITUTION
latitude:{} LATITUDE
longitude:{} LONGTITUDE
port:{'id': 'urn:ogf:network:domaina.net:port:A'}

subject:{'id': 'subject-port-A'}

metadata:{'id': 'md1'}

ifInOctets:{} integer-number
ifOutOctets:{} integer-number
datum:{'timeValue': '2006-12-04T16:43:38.0+0000', 'timeType':

因此,您可以看到iterparse / iterwalk函数的工作方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ElementTree的递归XML解析python

来自分类Dev

使用ElementTree Python获取检索XML属性

来自分类Dev

如何使用ElementTree正确解析utf-8 xml?

来自分类Dev

使用elementtree解析xml网站

来自分类Dev

在Android中使用简单XML解析XML文件列表元素

来自分类Dev

如何使用Python和ElementTree检测<?xml version =“ 1.0” encoding =“ UTF-8”的根xml元素?>

来自分类Dev

使用PHP从XML检索子节点值

来自分类Dev

使用Python ElementTree解析XML

来自分类Dev

使用ElementTree修改XML文件

来自分类Dev

使用ElementTree进行Python XML解析:如何查找具有相同名称的元素的值?

来自分类Dev

如何使用@JsonProperty检索子属性?

来自分类Dev

使用xml.etree.ElementTree XML解析子元素

来自分类Dev

如何使用ElementTree在父元素中的文本之间插入XML元素

来自分类Dev

使用ElementTree顺序解析某些XML标签

来自分类Dev

解析XML并使用XML元素重写文件名

来自分类Dev

如何将一个全新的元素(在Python中使用ElementTree)添加到XML文件

来自分类Dev

使用ElementTree在XML文件末尾找不到元素

来自分类Dev

如何使用Python elementTree提取xml数据中的特定元素

来自分类Dev

使用ElementTree解析XML

来自分类Dev

使用elementtree解析xml站点

来自分类Dev

如何使用Python和ElementTree检测<?xml version =“ 1.0” encoding =“ UTF-8”的根xml元素?>

来自分类Dev

使用ElementTree修改XML文件

来自分类Dev

解析XML:使用ElementTree查找有趣的元素

来自分类Dev

如何使用线程来检索子数组

来自分类Dev

在某些元素中插入 ElementTree 时,如何避免在生成的 XML 文件中出现错误缩进?

来自分类Dev

如何使用c#从XML文件中检索所有元素

来自分类Dev

如何使用 xml.etree.ElementTree 解析 XML 文件,其子项中有 HTML 内容

来自分类Dev

如何使用 Python ElementTree 在 XML 解析期间检查条件

来自分类Dev

ElementTree 解析 xml 文件 - 解析问题

Related 相关文章

  1. 1

    使用ElementTree的递归XML解析python

  2. 2

    使用ElementTree Python获取检索XML属性

  3. 3

    如何使用ElementTree正确解析utf-8 xml?

  4. 4

    使用elementtree解析xml网站

  5. 5

    在Android中使用简单XML解析XML文件列表元素

  6. 6

    如何使用Python和ElementTree检测<?xml version =“ 1.0” encoding =“ UTF-8”的根xml元素?>

  7. 7

    使用PHP从XML检索子节点值

  8. 8

    使用Python ElementTree解析XML

  9. 9

    使用ElementTree修改XML文件

  10. 10

    使用ElementTree进行Python XML解析:如何查找具有相同名称的元素的值?

  11. 11

    如何使用@JsonProperty检索子属性?

  12. 12

    使用xml.etree.ElementTree XML解析子元素

  13. 13

    如何使用ElementTree在父元素中的文本之间插入XML元素

  14. 14

    使用ElementTree顺序解析某些XML标签

  15. 15

    解析XML并使用XML元素重写文件名

  16. 16

    如何将一个全新的元素(在Python中使用ElementTree)添加到XML文件

  17. 17

    使用ElementTree在XML文件末尾找不到元素

  18. 18

    如何使用Python elementTree提取xml数据中的特定元素

  19. 19

    使用ElementTree解析XML

  20. 20

    使用elementtree解析xml站点

  21. 21

    如何使用Python和ElementTree检测<?xml version =“ 1.0” encoding =“ UTF-8”的根xml元素?>

  22. 22

    使用ElementTree修改XML文件

  23. 23

    解析XML:使用ElementTree查找有趣的元素

  24. 24

    如何使用线程来检索子数组

  25. 25

    在某些元素中插入 ElementTree 时,如何避免在生成的 XML 文件中出现错误缩进?

  26. 26

    如何使用c#从XML文件中检索所有元素

  27. 27

    如何使用 xml.etree.ElementTree 解析 XML 文件,其子项中有 HTML 内容

  28. 28

    如何使用 Python ElementTree 在 XML 解析期间检查条件

  29. 29

    ElementTree 解析 xml 文件 - 解析问题

热门标签

归档