【问题标题】:Parsing multiple root XML file in Python在 Python 中解析多个根 XML 文件
【发布时间】:2016-11-12 10:58:49
【问题描述】:

我是 Python 的初学者。 我使用 Python 2.7 和 ElementTree 来解析 XML 文件。 我有一个很大的 XML 文件(~700 MB),其中包含多个根实例,例如:

 <?xml version="1.0" ?> <foo> <bar> <sometag> Mehdi  </sometag> <someothertag> blahblahblah </someothertag> . . . </bar> </foo>
 <?xml version="1.0" ?> <foo> <bar> <sometag> Hamidi </sometag> <someothertag> blahblahblah </someothertag> . . . </bar> </foo>
...
...

每个 xml 实例都放在一行中。 我需要在 python 中解析这样的文件。我是这样使用 ElementTree 的:

import xml.etree.ElementTree as ET
tree = ET.parse('filename.xml')
root = tree.getroot()

但它似乎只能访问第一个根 XML 实例行。 解析此类文件中所有 XML 实例的正确方法是什么?

【问题讨论】:

  • 这不是有效的 XML。将文件拆分为单行并将每一行解析为 XML 文档。使用manyLinesString.split('\n')
  • 正如@ThomasWeller 所说,这不是一个有效的 XML。 Ans 正如我所看到的,您有两个选择:(1)正确构建您的 XML 或(2)如果可能的话 - 读取该行并将每一行解析为不同的 XML。

标签: python xml xml-parsing elementtree


【解决方案1】:

你可能想这样做:

from xml.etree import ElementTree as ET
root = ET.parse("file.xml").getroot()
getpid = root.iter("bar")

您还可以在线检查 xml 验证。 https://www.xmlvalidation.com/

【讨论】:

    【解决方案2】:

    您也可以使用 lxml.etree.iterparse() 方法,它运行得非常快。由IBM推荐-https://www.ibm.com/developerworks/xml/library/x-hiperfparse/

    for _, elem in etree.iterparse("filename.xml"):
        if elem.tag == 'bar':
            print(elem.text)
        elem.clear()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      相关资源
      最近更新 更多