首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python get xml标记列表

python get xml标记列表
EN

Stack Overflow用户
提问于 2018-03-05 23:58:43
回答 2查看 143关注 0票数 1

我有这个xml文件:

代码语言:javascript
复制
<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中,我想得到以下输出:

代码语言:javascript
复制
[[zoulou,yotta,alpha],[beta,omega]]

实际上,我可以在python中使用此代码的所有标记

代码语言:javascript
复制
tree = etree.parse("./file.xml")
[elt.tag for elt in tree.findall("discovers/discover/*")]

我有这样的输出:

代码语言:javascript
复制
['zoulou', 'yotta', 'alpha', 'beta', 'omega']

我没有找到按父节点分开标签列表的功能,你能帮我吗?我不知道如何分隔我的发现节点

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-06 00:19:43

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

代码语言:javascript
复制
[[ch.tag for ch in elt.findall('*')] for elt in doc.findall("discovers/discover")]

[['zoulou', 'yotta', 'alpha'], ['beta', 'omega']]
票数 0
EN

Stack Overflow用户

发布于 2018-03-06 00:59:31

实现所需内容的最佳方法是使用BeautifulSoup4,通常也是解析xml的最佳方法之一。

代码语言:javascript
复制
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']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49114501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档