gpt4 book ai didi

Python XML 解析器 : junk after document element

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:00 27 4
gpt4 key购买 nike

我正在工作中学习Python。我有一个大型 XML 文件,其中的数据与此类似:

testData3.xml 文件

<r><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c></c><c></c><c>something1</c><c>something1</c></r>
<r><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c></c><c></c><c>something2</c><c>something2</c></r>

我从一本 Python 书中复制了一个 XML 解析器,它可以在数据文件仅包含一行时收集数据。一旦我添加第二行数据,脚本运行时就会失败。

我正在运行的 Python 脚本 (xmlReader.py):

    from xml.dom.minidom import parse, Node
xmltree = parse('testData3.xml')
for node1 in xmltree.getElementsByTagName('c'):
for node2 in node1.childNodes:
if node2.nodeType == Node.TEXT_NODE:
print(node2.data)

我正在寻找一些有关如何编写循环的帮助,以便我的 xmlReader.py 继续遍历整个文件而不是仅一行。运行此脚本时出现以下错误:

执行过程中出现错误:

xxxx@xxxx:~/xxxx/xxxx> python xmlReader.py 
Traceback (most recent call last):
File "xmlReader.py", line 2, in <module>
xmltree = parse('testData3.xml')
File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1915, in parse
return expatbuilder.parse(file)
File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 926, in parse
result = builder.parseFile(fp)
File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 207, in parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: junk after document element: line 2, column 0
xxxx@xxxx:~/xxxx/xxxx>

最佳答案

问题是您的示例数据不是有效的 XML。有效的 XML 文档应该有一个根元素;这对于文件的单行来说是正确的,其中 <r>是根元素,但当您添加第二行时,情况并非如此,因为每行都包含在单独的 <r> 中。元素,但文件中没有全局父元素。

构造有效的 XML,例如:

<root>
<r><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c></c><c></c><c>something1</c><c>something1</c></r>
<r><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c></c><c></c><c>something2</c><c>something2</c></r>
</root>

或者逐行解析文件:

from xml.dom.minidom import parseString
f = open('testData3.xml'):
for line in f:
xmltree = parseString(line)
...
f.close()

关于Python XML 解析器 : junk after document element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46615026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com