Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算包含';特定文本';在xml文件中,不考虑层次结构?_Python_Xml_Xml Parsing - Fatal编程技术网

Python 如何计算包含';特定文本';在xml文件中,不考虑层次结构?

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文件。如何计算包含特定标记[Python]的标记的出现次数

<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']"))