python - LXML,如何将多组属性获取到列表

标签 python xml lxml

我有类似这样的问题:

How do I select multiple sets of attributes within an XML document using XPath?

我的 XML 数据如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Basic>
    <Segment>
        <Sample value="12" data2="25" data3="23"/>
        <Sample value="13" data2="0" data3="323"/>
        <Sample value="14" data2="2" data3="3"/>
    </Segment>
</Basic>

将那些 datax 值添加到列表中的最简单的 python 方法是什么。

例如:data2 = ['25','0','2']

最佳答案

使用 xpath:

from lxml import etree
from collections import defaultdict
from pprint import pprint

doc="""<?xml version="1.0" encoding="utf-8"?>
<Basic>
    <Segment>
        <Sample value="12" data2="25" data3="23"/>
        <Sample value="13" data2="0" data3="323"/>
        <Sample value="14" data2="2" data3="3"/>
    </Segment>
</Basic>
"""
el = etree.fromstring(doc)
data2 = el.xpath('//@data2')
dataX = el.xpath('//@*[starts-with(name(), "data")]')
print data2
print dataX

# With iteration over Sample elements, like in J.F. Sebastian answer, but with XPath
d = defaultdict(list)
for sample in el.xpath('//Sample'):
    for attr_name, attr_value in sample.items():
        d[attr_name].append(attr_value)

pprint(dict(d))

输出:

['25', '0', '2']
['25', '23', '0', '323', '2', '3']
{'data2': ['25', '0', '2'],
 'data3': ['23', '323', '3'],
 'value': ['12', '13', '14']}

关于python - LXML,如何将多组属性获取到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678314/

相关文章:

python - 无法在 python 3.5 上安装 lxml

python - 当 requirements.txt 或 setup.py 改变时用 tox 重新安装 virtualenv

python - 使用python向mongodb中插入数据

python - lxml.etree.ElementTree 破坏变音符号

python - 我应该如何在 python 中使用 lxml 处理 XLink 引用?

iphone - 使用 NSXMLParser 解析 XML 时出现问题

python - 如何从时间戳数组中以偶数间隔获取累积值 [PYTHON]

python - ManyToManyField 序列化模型缺乏数据

Python、XML 和多个 "hierarchical"默认命名空间

c# - 使用 C# 获取 XML 文档的属性值