python 解析 xml 并获取根下每个子元素的属性值
python parse xml and get attributes values for each subelement under root
我正在使用 xpath 搜索属性,但我不确定如何获取根下每个子元素的属性
这是我的示例 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
因此无法查看哪些组关联了哪些用户
如果我能以某种方式区分这一点,也许我可以构建一个字典,其中键作为用户,值作为组,但我不确定如何
这是我第一次 post 堆栈溢出,如果我遗漏了什么或没有提供所有需要的信息,我深表歉意
欢迎使用 Whosebug!专业提示:包含一个 Minimal, Complete, and Verifiable example 会很有帮助。你部分地在那里;我们只需要代码和所需的输出。
我认为您要获取的是 Name
和 GroupName
元素的文本节点。您的 XML 中实际上没有任何属性。 (使用正确的术语将帮助您避免很多混淆。也许看看 https://www.w3.org/TR/xml11/)
我会做的是 select 每个 User
,然后使用 Name
在包含列表的字典中创建一个项目。然后您可以 select 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']}
我正在使用 xpath 搜索属性,但我不确定如何获取根下每个子元素的属性
这是我的示例 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
因此无法查看哪些组关联了哪些用户
如果我能以某种方式区分这一点,也许我可以构建一个字典,其中键作为用户,值作为组,但我不确定如何
这是我第一次 post 堆栈溢出,如果我遗漏了什么或没有提供所有需要的信息,我深表歉意
欢迎使用 Whosebug!专业提示:包含一个 Minimal, Complete, and Verifiable example 会很有帮助。你部分地在那里;我们只需要代码和所需的输出。
我认为您要获取的是 Name
和 GroupName
元素的文本节点。您的 XML 中实际上没有任何属性。 (使用正确的术语将帮助您避免很多混淆。也许看看 https://www.w3.org/TR/xml11/)
我会做的是 select 每个 User
,然后使用 Name
在包含列表的字典中创建一个项目。然后您可以 select 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']}