我有要解析的示例xml文件。如何计算包含特定标签[Python]的标签的出现次数?
<xml>
<t1>fdhdhd</t1>
<t2>fdhdhd</t2>
<sub>
<context>aligned</context>
</sub>
<context>not-aligned</context>
<sub>
<context>aligned</context>
</sub>
</xml>
如何计算包含“对齐”和“未对齐”文字的标记“sub”的出现次数?
答案 0 :(得分:2)
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"])')
出:
2.0
答案 1 :(得分: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
出现在下面。在那种情况下
from xml.etree import ElementTree as ET
xml = ET.parse('sample.xml')
count = len(xml.findall(".//*[context='aligned']"))
应该给你你想要的东西。