如何通过使用 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"进行映射来获取这里&lt;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 还是lxmlReadXMLxpath() 方法吗? @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中的正则表达式匹配中返回一个字符串? [复制]

如何将集群标签与 Matlab 中的“基本事实”标签匹配

正则表达式、xpath、BeautifulSoup和JSONPath的区别?

将任意 Python 字符串与 Python 正则表达式匹配?