首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python解析xml并获取根目录下每个子元素的属性值

python解析xml并获取根目录下每个子元素的属性值
EN

Stack Overflow用户
提问于 2018-06-07 06:13:17
回答 1查看 428关注 0票数 3

我正在使用xpath搜索属性,但我不确定如何才能获得root下每个子元素的属性

下面是我的示例xml文件

代码语言:javascript
复制
<User>
  <Name>abcd</Name>
  <Groups>
     <GroupName>A</GroupName>
     <groupName>B</GroupName>
  </Groups>
</User>
<User>
  <Name>zxcv</Name>
  <Groups>
     <GroupName>A</GroupName>
     <GroupName>C</GroupName>
  </Groups>
</User>

我想通过标签"Name“来检索与每个用户相关联的组名,这在python中是可能的吗?

当我为GroupName使用lxml xpath时,我只得到如下所示的GroupNames列表:

一个

一个

B

C

因此,无法查看哪些组与哪个用户相关联

如果我能以某种方式区分这一点,也许我可以构建一个字典,将键作为用户,将值作为组,但我不确定如何进行

这是我第一篇关于堆栈溢出的文章,如果我遗漏了什么或者没有提供所有需要的信息,我深表歉意

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 07:42:20

欢迎使用StackOverflow!ProTip:包含Minimal, Complete, and Verifiable example是很有帮助的。您只需要一部分;我们只需要代码和所需的输出。

我认为您要获取的是NameGroupName元素的文本节点。您的XML中实际上没有任何属性。(使用正确的术语将帮助您避免许多混淆。也许可以看看https://www.w3.org/TR/xml11/)

我要做的是选择每个User,然后使用Name在包含列表的字典中创建一个项。然后,您可以选择GroupName元素并将它们添加到当前User的列表中。

例如。

代码语言:javascript
复制
from lxml import etree

# Added "doc" root element to make the XML well-formed.
xml = """
<doc>
    <User>
        <Name>abcd</Name>
        <Groups>
            <GroupName>A</GroupName>
            <GroupName>B</GroupName>
        </Groups>
    </User>
    <User>
        <Name>zxcv</Name>
        <Groups>
            <GroupName>A</GroupName>
            <GroupName>C</GroupName>
        </Groups>
    </User>
</doc>
"""

tree = etree.fromstring(xml)

users = {}
for user in tree.xpath("//User"):
    name = user.xpath("Name")[0].text
    users[name] = []
    for group in user.xpath("Groups/GroupName"):
        users[name].append(group.text)

print users

这将输出(打印)...

代码语言:javascript
复制
{'abcd': ['A', 'B'], 'zxcv': ['A', 'C']}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50730388

复制
相关文章

相似问题

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