如何通过使用 Python 将标签与字符串匹配来映射 XML 标签?
Posted
技术标签:
【中文标题】如何通过使用 Python 将标签与字符串匹配来映射 XML 标签?【英文标题】:How to mapping XML tag by matching the tag with a string using Python? 【发布时间】:2021-06-08 03:22:45 【问题描述】:我有一个 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)
任何人都可以帮助我,拜托。非常感谢
【问题讨论】:
这是xml.etree
还是lxml
? ReadXML
有 xpath()
方法吗?
@har07 我像这样使用xml.etree
ReadXML = ET.parse('data.xml')
不,我没有xpath
方法
【参考方案1】:
您可以使用XPath表达式通过class
子元素的class
属性选择元素number
,然后您可以从python中选择number
中读取no
属性:number[detail/@class="A1"]
但是findall()
只支持limited subset of XPath 表达式,它不包括上面的XPath。我们需要使用更简单的 XPath 表达式,例如使用您尝试的 XPath,然后使用 ..
选择匹配的 detail
元素的父元素:
stringno = 'A1'
for family in ReadXML.findall('number/detail[@class=""]/..'.format(stringno)):
name = family.get('no')
print(name)
【讨论】:
是的!有用。你很棒!非常感谢。 嗨@har07。当class="A1\X2"
的值类似这样时,我遇到了问题。如果你不介意,请你给任何建议或想法。谢谢以上是关于如何通过使用 Python 将标签与字符串匹配来映射 XML 标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 使用 K-Means 匹配具有真实标签的标签集群
Python/Pandas:如何将字符串列表与 DataFrame 列匹配
如何从python中的正则表达式匹配中返回一个字符串? [复制]