如何通过使用 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)
我有一个 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,然后使用 ..
:
detail
元素的父元素
stringno = 'A1'
for family in ReadXML.findall('number/detail[@class="{}"]/..'.format(stringno)):
name = family.get('no')
print(name)