使用ElementTree的递归XML解析python

看到

我正在尝试使用Python ElementTree解析以下XML来生成如下所示的产品输出。我正在尝试为顶部元素编写模块以打印它们。但是,这有点棘手,因为类别元素可能具有或不具有属性,类别元素内部可能具有类别元素。

我已经提到了本主题中的上一个问题,但它们不包含具有相同名称的嵌套元素

我的代码:http//pastebin.com/Fsv2Xzqf

work.xml:
<suite id="1" name="MainApplication">
<displayNameKey>my Application</displayNameKey>
<displayName>my Application</displayName>
<application id="2" name="Sub Application1">
<displayNameKey>sub Application1</displayNameKey>
<displayName>sub Application1</displayName>
<category id="2423" name="about">
<displayNameKey>subApp.about</displayNameKey>
<displayName>subApp.about</displayName>
<category id="2423" name="comms">
<displayNameKey>subApp.comms</displayNameKey>
<displayName>subApp.comms</displayName>
<property id="5909" name="copyright" type="string_property" width="40">
<value>2014</value>
</property>
<property id="5910" name="os" type="string_property" width="40">
<value>Linux 2.6.32-431.29.2.el6.x86_64</value>
</property>
</category>
<property id="5908" name="releaseNumber" type="string_property" width="40">
<value>9.1.0.3.0.54</value>
</property>
</category>
</application>
</suite>

输出应如下所示:

Suite: MainApplication
    Application: Sub Application1
        Category: about
            property: releaseNumber | 9.1.0.3.0.54
            category: comms
                property: copyright | 2014
                property: os | Linux 2.6.32-431.29.2.el6.x86_64

任何指向正确方向的指针都会有所帮助。

贾廷·库玛(Jatin Kumar)
import xml.etree.ElementTree as ET
tree = ET.ElementTree(file='work.xml')

indent = 0
ignoreElems = ['displayNameKey', 'displayName']

def printRecur(root):
    """Recursively prints the tree."""
    if root.tag in ignoreElems:
        return
    print ' '*indent + '%s: %s' % (root.tag.title(), root.attrib.get('name', root.text))
    global indent
    indent += 4
    for elem in root.getchildren():
        printRecur(elem)
    indent -= 4

root = tree.getroot()
printRecur(root)

输出:

Suite: MainApplication
    Application: Sub Application1
        Category: about
            Category: comms
                Property: copyright
                    Value: 2014
                Property: os
                    Value: Linux 2.6.32-431.29.2.el6.x86_64
            Property: releaseNumber
                Value: 9.1.0.3.0.54

这是我在5分钟内能得到的最接近的信息。您应该仅递归地调用处理器函数,这会很小心。您可以从这一点上进行改进:)


您还可以为每个标签定义处理程序功能,并将它们全部放入字典中以便于查找。然后,您可以检查该标签是否具有适当的处理函数,然后调用该函数,否则将继续盲目打印。例如:

HANDLERS = {
    'property': 'handle_property',
    <tag_name>: <handler_function>
}

def handle_property(root):
    """Takes property root element and prints the values."""
    data = ' '*indent + '%s: %s ' % (root.tag.title(), root.attrib['name'])
    values = []
    for elem in root.getchildren():
        if elem.tag == 'value':
            values.append(elem.text)
    print data + '| %s' % (', '.join(values))

# printRecur would get modified accordingly.
def printRecur(root):
    """Recursively prints the tree."""
    if root.tag in ignoreElems:
        return

    global indent
    indent += 4

    if root.tag in HANDLERS:
        handler = globals()[HANDLERS[root.tag]]
        handler(root)
    else:
        print ' '*indent + '%s: %s' % (root.tag.title(), root.attrib.get('name', root.text))
        for elem in root.getchildren():
            printRecur(elem)

    indent -= 4

上面的输出:

Suite: MainApplication
    Application: Sub Application1
        Category: about
            Category: comms
                Property: copyright | 2014
                Property: os | Linux 2.6.32-431.29.2.el6.x86_64
            Property: releaseNumber | 9.1.0.3.0.54

我发现这非常有用,而不是在代码中放入大量的if / else。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Python ElementTree解析XML

来自分类Dev

使用ElementTree解析XML

来自分类Dev

如何使用ElementTree递归遍历Python中的XML标签?

来自分类Dev

使用elementtree解析xml网站

来自分类Dev

使用elementtree解析xml站点

来自分类Dev

使用ElementTree在Python中解析XML-findall

来自分类Dev

使用python ElementTree解析XML:ParseError:标记不匹配

来自分类Dev

Python-使用ElementTree解析具有重复标签的XML

来自分类Dev

使用ElementTree在Python中解析XML-findall

来自分类Dev

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

来自分类Dev

XML解析Python ElementTree-嵌套循环

来自分类Dev

Python - ElementTree XML API(未按预期解析)

来自分类Dev

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

来自分类Dev

使用xml.etree.ElementTree的Python xml解析不起作用

来自分类Dev

Python xml.ElementTree - 在变量中返回解析后的 xml 以供稍后使用的函数

来自分类Dev

ElementTree:解析XML的曾孙

来自分类Dev

python使用ElementTree解析xml并没有给出感兴趣的结果

来自分类Dev

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

来自分类Dev

在Python中使用ElementTree解析具有名称空间的XML

来自分类Dev

在Python中使用ElementTree进行XML解析时检查子代的存在

来自分类Dev

python(xml.etree.ElementTree)中的XML解析

来自分类Dev

使用ElementTree解析XML中的XML节点值

来自分类Dev

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

来自分类Dev

使用ElementTree解析XML时使用名称空间

来自分类Dev

使用ElementTree Python获取检索XML属性

来自分类Dev

使用python的ElementTree处理xml子对象

来自分类Dev

在Python中使用ElementTree从XML提取数据

来自分类Dev

使用Python ElementTree从XML中提取值

来自分类Dev

使用xml子对象,Python中的ElementTree

Related 相关文章

  1. 1

    使用Python ElementTree解析XML

  2. 2

    使用ElementTree解析XML

  3. 3

    如何使用ElementTree递归遍历Python中的XML标签?

  4. 4

    使用elementtree解析xml网站

  5. 5

    使用elementtree解析xml站点

  6. 6

    使用ElementTree在Python中解析XML-findall

  7. 7

    使用python ElementTree解析XML:ParseError:标记不匹配

  8. 8

    Python-使用ElementTree解析具有重复标签的XML

  9. 9

    使用ElementTree在Python中解析XML-findall

  10. 10

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

  11. 11

    XML解析Python ElementTree-嵌套循环

  12. 12

    Python - ElementTree XML API(未按预期解析)

  13. 13

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

  14. 14

    使用xml.etree.ElementTree的Python xml解析不起作用

  15. 15

    Python xml.ElementTree - 在变量中返回解析后的 xml 以供稍后使用的函数

  16. 16

    ElementTree:解析XML的曾孙

  17. 17

    python使用ElementTree解析xml并没有给出感兴趣的结果

  18. 18

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

  19. 19

    在Python中使用ElementTree解析具有名称空间的XML

  20. 20

    在Python中使用ElementTree进行XML解析时检查子代的存在

  21. 21

    python(xml.etree.ElementTree)中的XML解析

  22. 22

    使用ElementTree解析XML中的XML节点值

  23. 23

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

  24. 24

    使用ElementTree解析XML时使用名称空间

  25. 25

    使用ElementTree Python获取检索XML属性

  26. 26

    使用python的ElementTree处理xml子对象

  27. 27

    在Python中使用ElementTree从XML提取数据

  28. 28

    使用Python ElementTree从XML中提取值

  29. 29

    使用xml子对象,Python中的ElementTree

热门标签

归档