我正在使用xpath搜索属性,但我不确定如何才能获得root下每个子元素的属性
下面是我的示例xml文件
<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
因此,无法查看哪些组与哪个用户相关联
如果我能以某种方式区分这一点,也许我可以构建一个字典,将键作为用户,将值作为组,但我不确定如何进行
这是我第一篇关于堆栈溢出的文章,如果我遗漏了什么或者没有提供所有需要的信息,我深表歉意
发布于 2018-06-07 07:42:20
欢迎使用StackOverflow!ProTip:包含Minimal, Complete, and Verifiable example是很有帮助的。您只需要一部分;我们只需要代码和所需的输出。
我认为您要获取的是Name
和GroupName
元素的文本节点。您的XML中实际上没有任何属性。(使用正确的术语将帮助您避免许多混淆。也许可以看看https://www.w3.org/TR/xml11/)
我要做的是选择每个User
,然后使用Name
在包含列表的字典中创建一个项。然后,您可以选择GroupName
元素并将它们添加到当前User
的列表中。
例如。
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
这将输出(打印)...
{'abcd': ['A', 'B'], 'zxcv': ['A', 'C']}
https://stackoverflow.com/questions/50730388
复制相似问题