分析嵌套属性

2024-04-23 23:03:30 发布

您现在位置:Python中文网/ 问答频道 /正文

亲爱的开发人员,大家好。 我无法完全解析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')。文本

问题是如何获得下一个嵌套属性?(Id=2和Id=3) 当我试图用斜杠的时候,它显示了一个错误 源.get('bar/id') 其他尝试只给我已经得到的第一个属性,第二个嵌套属性也有相同的名称Id

提前谢谢你的帮助。你知道吗


Tags: 文件代码idsourceget属性foo开发人员
3条回答

下面是一个工作示例

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

它现在只适用于一行,但是如果我们有几个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=>;for)将打印它的全部内容(4个ID),但每行只需要2个ID

您需要指定一个有效的XPATH表达式,如:

foobars = source.findall('bar1/bar2/foobar')
for elem in foobars:
    print(elem.get('id'))

输出:

2
3

相关问题 更多 >