python获取xml标记lis

2024-04-27 00:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个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']

我找不到按父节点单独标记列表的函数,您能帮我吗? 我不知道如何分离我的发现节点


Tags: 文件标记alphatree节点rootxmlbeta
2条回答

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

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

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

实现所需的最佳方法(通常是解析xml的最佳方法之一)是使用BeautifulSoup4

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']]

相关问题 更多 >