python get xml tag list

时间:2018-03-05 15:58:43

标签: python xml tags

我有这个xml文件:

<root>
    <discovers>
        <discover>
            <zoulou>zag</zoulou>
            <yotta>bob</yotta>
            <alpha>ned</alpha>
        </discover>

        <discover>
            <beta>Zorro</beta>
            <omega>Danseur</omega>
        </discover>
    </discovers>
</root>

在python3.6中我想得到这个输出:

[[zoulou,yotta,alpha],[beta,omega]]

实际上我可以在python

中使用此代码进行所有标记
tree = etree.parse("./file.xml")
[elt.tag for elt in tree.findall("discovers/discover/*")]

我有这个输出:

['zoulou', 'yotta', 'alpha', 'beta', 'omega']

我找不到父节点单独标签列表的功能,你能帮帮我吗? 我不知道如何分离我的发现节点

2 个答案:

答案 0 :(得分:0)

这可以通过嵌套列表推导来实现。一种选择是在外部理解中找到所有“发现”元素,然后找到任何子元素。

[[ch.tag for ch in elt.findall('*')] for elt in doc.findall("discovers/discover")]

[['zoulou', 'yotta', 'alpha'], ['beta', 'omega']]

答案 1 :(得分:0)

实现所需内容的最佳方法是使用BeautifulSoup4

来解决xml的最佳方法。
from bs4 import BeautifulSoup


result = """<root>
    <discovers>
        <discover>
            <zoulou>zag</zoulou>
            <yotta>bob</yotta>
            <alpha>ned</alpha>
        </discover>

        <discover>
            <beta>Zorro</beta>
            <omega>Danseur</omega>
        </discover>
    </discovers>
</root>"""
soup = BeautifulSoup(result, "lxml")

findName = lambda child: child.name
print [map(findName, x.findChildren()) for x in soup.findAll('discover')] # [['zoulou', 'yotta', 'alpha'], ['beta', 'omega']]