Python 如何计算包含';特定文本';在xml文件中,不考虑层次结构?
我有要解析的示例xml文件。如何计算包含特定标记[Python]的标记的出现次数Python 如何计算包含';特定文本';在xml文件中,不考虑层次结构?,python,xml,xml-parsing,Python,Xml,Xml Parsing,我有要解析的示例xml文件。如何计算包含特定标记[Python]的标记的出现次数 <xml> <t1>fdhdhd</t1> <t2>fdhdhd</t2> <sub> <context>aligned</context> </sub> <context>not-aligned</context> <sub>
<xml>
<t1>fdhdhd</t1>
<t2>fdhdhd</t2>
<sub>
<context>aligned</context>
</sub>
<context>not-aligned</context>
<sub>
<context>aligned</context>
</sub>
</xml>
fdhdhd
fdhdhd
对齐的
不一致
对齐的
如何计算包含文本“对齐”和“未对齐”的标记“sub”的出现次数?如果您希望在标准库中执行此操作(即没有
lxml
依赖项),可以尝试此操作(假设您的xml文件是sample.xml
):
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"])')
编辑:如果我正确理解您对我的答案的评论,您永远不想同时计算“未对齐”和“对齐”,而总是只计算两者中的任何一个。此外,您实际上并不关心哪个元素context
出现在下面。那么
from xml.etree import ElementTree as ET
xml = ET.parse('sample.xml')
count = len(xml.findall(".//*[context='aligned']"))
应该提供您想要的。如果您希望在标准库中执行此操作(即没有
lxml
依赖项),您可以尝试此操作(假设您的xml文件是sample.xml
):
编辑:如果我正确理解您对我的答案的评论,您永远不想同时计算“未对齐”和“对齐”,而总是只计算两者中的任何一个。此外,您实际上并不关心哪个元素context
出现在下面。那么
from xml.etree import ElementTree as ET
xml = ET.parse('sample.xml')
count = len(xml.findall(".//*[context='aligned']"))
应该会给你想要的。可能会有帮助,你的意思是:
sub
包含右文本的子标记?可能会有帮助,你的意思是:sub
包含右文本的子标记?@Jackie如果你在安装lxml
时遇到问题,请使用Anaconda,它包含您需要的所有依赖项,并且预先安装了lxml
。@Jackie如果您在安装lxml
时遇到问题,请使用Anaconda,它包含您需要的所有依赖项,并且lxml
是预先安装的。有没有办法找到包含“对齐”文本的标记“上下文”的计数/长度?可以是一个liner您可以按如下方式编辑上述解决方案:从xml.etree导入ElementTree作为ET tree=ET.parse('sample.xml')root=tree.getroot()打印len(root.findall('.//context'))打印len(root.findall('.//*[context='aligned'])。这看起来非常简单和直接。在这里如何处理损坏的xml?“ET.parse”在这里不起作用?XML解析器通常不用于处理“断开的”输入(与HTML解析器相反)。您可能希望尝试以下错误:“xml.etree.ElementTree.ParseError:不匹配的标记:”。我们是否有类似于“从xml.etree导入元素树为ET”的“lxml:parser=etree.XMLParser(recover=True)”的方法?是否有任何方法可以找到包含文本“aligned”的标记“context”的计数/长度?可以是一个liner您可以按如下方式编辑上述解决方案:从xml.etree导入ElementTree作为ET tree=ET.parse('sample.xml')root=tree.getroot()打印len(root.findall('.//context'))打印len(root.findall('.//*[context='aligned'])。这看起来非常简单和直接。在这里如何处理损坏的xml?“ET.parse”在这里不起作用?XML解析器通常不用于处理“断开的”输入(与HTML解析器相反)。您可能希望尝试以下错误:“xml.etree.ElementTree.ParseError:不匹配的标记:”。对于“从xml.etree导入ElementTree作为ET”,我们是否有类似于“lxml:parser=etree.XMLParser(recover=True)”的内容?
from xml.etree import ElementTree as ET
xml = ET.parse('sample.xml')
count = len(xml.findall(".//*[context='aligned']"))