【问题标题】:Is there a way to count the number of elements of a certain name in an xml file using Python?有没有办法使用 Python 计算 xml 文件中某个名称的元素数量?
【发布时间】:2016-05-17 02:20:01
【问题描述】:

我在 Windows 64 位机器上使用 Python 3.4。

我目前有一个包含多个层次结构的 xml 文件。 xml 树中有许多名为“段落”的元素。但它们可能位于不同的层次结构上。

有什么方法可以简单地计算这些元素的数量吗?遍历整棵树似乎太耗时了。

【问题讨论】:

  • 你需要遍历整个树两次:一次解析它,另一次计算每个段落标签。我相信count 解决方案仍将再次遍历树。如果您将计算标签与解析树结合起来,您可能只能遍历树一次,但这将是很多工作。

标签: python xml xpath xml-parsing


【解决方案1】:

如果您要使用lxml.etree,那么您将拥有完整的 XPath 支持并且可以使用count()

import lxml.etree as ET

tree = ET.parse(xml)
paragraphs = tree.xpath('count(//p)')
print(paragraphs)

xml.etree.ElementTree 中,您必须通过findall()len() 在Python 中执行此操作,因为limited XPath support

import xml.etree.ElementTree as ET

tree = ET.parse(xml)
paragraphs = tree.findall('//p')
print(len(paragraphs)) 

【讨论】:

  • 'count(//p)' 是什么意思?
  • @joewong count() 是一个 XPath 函数(我已经添加了一个链接),//p 会递归地找到文档中的所有 p 元素。
【解决方案2】:

读取xml文件,获取xmlString中的内容。如果您只需要“段落”一词的出现次数,则可以执行以下操作-

xmlString.count("<paragraph>")

这对您的 xml 文件的外观做出了几个假设,并且可能并非在所有情况下都有效。

【讨论】:

    【解决方案3】:

    我现在找到了使用xml.dom.minidom 完成这项工作的简单方法:

    import xml.dom.mimidom as DM
    tree = DM.parse(xml_file)
    paragraphs = tree.getElementByTagName('paragraph')
    print(len(paragraphs))
    

    【讨论】:

    • 坚持这个想法,继续用minidom解析xml一段时间,然后回来告诉我事情仍然很容易:)
    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2020-06-26
    • 2021-10-15
    • 2021-02-16
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多