gpt4 book ai didi

python - 使用 Python 解析(可能是非标准的)XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:56:57 26 4
gpt4 key购买 nike

我刚刚开始研究 Python 和 XML,我正面临解析(可能)非标准 XML 的问题(如果我错了,请纠正我)。

我想通过预先根据元素的属性值识别该元素来解析该元素的值。

更多细节:我有两个元素 'Name'我想解析具有属性 language == 'en-US' 的值.

在我的 XML 文件中,<'Name' language == 'en-US'>总是立即出现在 <'Name' language == 'es-ES'> 之后我无法获得前者的值(例如 B ),我只能获得后者的值(例如 A )。

XML 文件:

<Eways>
<Products>
<Operator>
<Name language="es-ES">A</Name>
<Name language="en-US">B</Name>
</Operator>
</Products>
</Eways>

Python 脚本:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

for prod in root.findall('Products'):

for op in prod.findall('Operator'):
print op.find('Name').text ### <- Testing, here I would expect to print both A and B, but only A is printed.

for names in op.iter(tag='Name'): ### Here I iterate over Element 'Name' trying to get the values anyways.
l_name = names.get('language')

if l_name == 'en-US': ### My objective is to print out the value of Element 'Name' where Attribute language == en-US.
print 'OK en-US', names.find('Name') ### I can not get the values (neither A nor B)
else:
print 'KO en-US', names.find('Name')

最佳答案

element.find()方法只会找到第一个 匹配元素。如果您希望找到两个 元素,则必须使用element.findall()。 .

你不需要在这里做那么多循环;只需使用 XPath expression :

for nametag in tree.findall('./Products/Operator/Name[@language]'):
print nametag.attrib['language'], nametag.text

这里的 XPath 查询非常具体;只有Name带有 language 的元素Operator 中的属性在 Products 里面找到元素。

.text此处的属性为您提供了内容。

演示:

>>> from xml.etree import ElementTree as ET
>>> tree = ET.fromstring('''\
... <Eways>
... <Products>
... <Operator>
... <Name language="es-ES">A</Name>
... <Name language="en-US">B</Name>
... </Operator>
... </Products>
... </Eways>
... ''')
>>> for nametag in tree.findall('./Products/Operator/Name[@language]'):
... print nametag.attrib['language'], nametag.text
...
es-ES A
en-US B

如果您只想要 <Name language="en-US">标记,调整 XPath 查询:

for nametag in tree.findall("./Products/Operator/Name[@language='en-US']"):
print nametag.attrib['language'], nametag.text

哪里[@language='en-US']部分将搜索限制为仅具有特定属性值的标签。

关于python - 使用 Python 解析(可能是非标准的)XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25179423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com