美好的一天,亲爱的开发人员。 我无法完全解析xml文件。
结构如下:
<foo>
<bar1 id="1">
<bar2>
<foobar id="2">name1</foobar>
<foobar id="3">name2</foobar>
</bar2>
</bar1>
</foo>
我使用了xml.etree库,所以我使用如下代码:
source.get('Id')
所以我得到第一个属性
要获取一个嵌套标签,我使用如下代码: source.find('bar / foobar')。text
问题是如何获取下一个嵌套属性?(ID = 2,ID = 3) 当我尝试使用带有斜杠的某些东西时显示错误 source.get('bar / id') 其他尝试只给我已经获得的第一个属性,第二个嵌套属性也具有相同的ID。
谢谢您的帮助。
答案 0 :(得分:1)
它现在只适用于一行,但是如果我们有多个bar1怎么办?像这样
<foo>
<bar1 id="1">
<bar2>
<foobar id="2">name1</foobar>
<foobar id="3">name2</foobar>
</bar2>
</bar1>
<bar1 id="2">
<bar2>
<foobar id="2">name3</foobar>
<foobar id="3">name4</foobar>
</bar2>
</bar1>
</foo>
循环(findall =>)将打印所有循环(4个id),但是我每行只需要2个
答案 1 :(得分:0)
您需要指定一个有效的XPATH表达式,例如:
foobars = source.findall('bar1/bar2/foobar')
for elem in foobars:
print(elem.get('id'))
输出:
2
3
答案 2 :(得分:0)
下面是一个有效的示例
import xml.etree.ElementTree as ET
xml = '''<foo>
<bar1 id="1">
<bar2>
<foobar id="2">name1</foobar>
<foobar id="3">name2</foobar>
</bar2>
</bar1>
</foo>'''
root = ET.fromstring(xml)
ids = [f.attrib.get('id') for f in root.findall('.//foobar')]
print(ids)
输出
['2','3']