我使用xpath搜索attirbutes,但我不确定如何获取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>
我想通过标记&#34; Name&#34;检索与每个用户关联的组名。 这在python中是否可行?
当我使用lxml xpath for GroupName时,我只会得到一个GroupNames列表,如下所示:
A
A
乙
C
因此无法查看哪些组与哪个用户相关联
如果我可以以某种方式区分这个,也许我可以用关键字作为用户构建字典,并将值作为组,但我不知道如何
这是我第一篇关于堆栈溢出的帖子,如果我错过了某些内容或者没有提供所有必需的信息,我道歉
答案 0 :(得分:0)
欢迎使用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']}