如何通过使用 Python 将标签与字符串匹配来映射 XML 标签?

How to mapping XML tag by matching the tag with a string using Python?

我有一个 XML 文件。

内容如下:

<Country>
     <number no="2008" info="update">
          <detail name="man1" class="A1">
               <string name="ruth" />
               <string name="amy" />
          </detail>
          <detail name="man2" class="A2">
               <string name="lisa" />
               <string name="graham" />
          </detail>
     </number>
     <number no="2006" info="update">
          <detail name="woman1" class="B1">
               <string name="grace" />
               <string name="chil" />
          </detail>
          <detail name="woman2" class="B2">
               <string name="emy" />
               <string name="toms" />
          </detail>
     </number>
</Country>

我需要通过映射此值 class="A1"

来获取此处 <number no="2008" 中数字的值

我试过这种方式,但它打印 None。 这是代码:

import xml.etree.ElementTree as ET
ReadXML = ET.parse('data.xml')
stringno = 'A1'
for family in ReadXML.findall('./number/detail[@class="{}"]'.format(stringno)):
    name = family.get('no')
    print(name)

任何人都可以帮助我,请。非常感谢

您可以通过 detail 子元素的 class 属性对 select 元素 number 使用 XPath 表达式,然后您可以从 selected number 来自 python:number[detail/@class="A1"]

但是findall()只支持不包含上述XPath的limited subset of XPath表达式。我们需要求助于更简单的 XPath 表达式,例如使用您尝试的 XPath,然后使用 ..:

selecting 匹配 detail 元素的父元素
stringno = 'A1'
for family in ReadXML.findall('number/detail[@class="{}"]/..'.format(stringno)):
    name = family.get('no')
    print(name)