如何计算xml文件中包含“特定文本”的标记,而不考虑层次结构?

2024-10-01 13:27:32 发布

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

我有要解析的示例xml文件。如何计算包含特定标记[Python]的标记的出现次数?在

<xml>
  <t1>fdhdhd</t1>
  <t2>fdhdhd</t2>
  <sub>
      <context>aligned</context>
  </sub>
 <context>not-aligned</context>
    <sub>
      <context>aligned</context>
  </sub>
</xml>

如何计算包含文本“aligned”和“not aligned”的标记“sub”的出现次数?在


Tags: 文件标记文本示例contextnotxml次数
2条回答

如果您希望在标准库中执行此操作(即不使用lxml依赖项),可以尝试以下操作(假设您的xml文件是sample.xml):

from xml.etree import ElementTree as ET

xml = ET.parse('sample.xml')
count = 0
for e in xml.findall(".//sub[context]"):
    if e.find("context").text in ('aligned', 'not-aligned'):
        count += 1
print(count)

编辑:如果我正确理解您对我的答案的评论,您永远不会想同时计算“未对齐”和“对齐”两个值,而是只计算两个值中的任何一个。而且,您实际上并不关心context出现在哪个元素下面。那样的话

^{pr2}$

应该给你你想要的。在

xml = '''<xml>
  <t1>fdhdhd</t1>
  <t2>fdhdhd</t2>
  <sub>
      <context>aligned</context>
  </sub>
 <context>not-aligned</context>
    <sub>
      <context>aligned</context>
  </sub>
</xml>'''

from lxml import etree

tree = etree.fromstring(xml)
tree.xpath('count(//sub/context[.="aligned" or .="not-aligned"])')

输出:

^{pr2}$

相关问题 更多 >