解析嵌套属性

时间:2020-01-01 17:48:04

标签: python xml parsing

美好的一天,亲爱的开发人员。 我无法完全解析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。

谢谢您的帮助。

3 个答案:

答案 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']