【问题标题】:parsing xml document results parse errors解析xml文档结果解析错误
【发布时间】:2015-03-19 14:06:23
【问题描述】:

我有一个 800 mb 的巨大 xml 文件,即 dblp 数据集,但是当我运行我的代码时,我收到以下错误:-

我在我的代码中执行以下操作:-

1.Parse input file by lxml module
2.Get Title name from the User by raw_input()
3.Target article tag who title start with User input in step2.
4.Iterate every article tags from the step 3
5.Create List of list tuple which save all articles tag and its text information in th result.
6.Print result.

我的代码:-

import lxml.etree as ET
root = ET.parse('input.xml')

title = raw_input('enter the name: ')
articles = root.xpath('.//article[starts-with(title, "%s")]' % title)
result = []
for article in articles:
    tmp = []
    for i in article.getchildren():
        tmp.append((i.tag, i.text))

    result.append(tmp)

#- Print result:
for i in result:
    print "\n"
    for j in i:
        print "%s:%s"%(j[0], j[1])

得到的错误:-

Traceback (most recent call last):
  File "C:/Python27/xmp2.py", line 2, in <module>
    root = ET.parse('myxml.xml')
  File "lxml.etree.pyx", line 3301, in lxml.etree.parse (src\lxml\lxml.etree.c:72453)
  File "parser.pxi", line 1791, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:105915)
  File "parser.pxi", line 1817, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:106214)
  File "parser.pxi", line 1721, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:105213)
  File "parser.pxi", line 1122, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:100163)
  File "parser.pxi", line 580, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:94286)
  File "parser.pxi", line 690, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:95722)
  File "parser.pxi", line 620, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:94789)
XMLSyntaxError: Entity 'ouml' not defined, line 47, column 25

我的 xml 看起来像:-

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
<dblp>
<article mdate="2011-01-11" key="journals/acta/Saxena96">
<author>Sanjeev Saxena</author>
<title>Parallel Integer Sorting and Simulation Amongst CRCW Models.</title>
<pages>607-619</pages>
<year>1996</year>
<volume>33</volume>
<journal>Acta Inf.</journal>
<number>7</number>
<url>db/journals/acta/acta33.html#Saxena96</url>
<ee>http://dx.doi.org/10.1007/BF03036466</ee>
</article>

请帮我解决我的问题! 提前致谢。

【问题讨论】:

    标签: python xml lxml


    【解决方案1】:

    错误信息

    实体“ouml”未定义,第 47 行,第 25 列

    表示在您的文档的这个位置,出现了实体引用&amp;ouml;,没有找到它的定义。 (它可能旨在表示 o-with-umlaut,但与 HTML 不同,此类实体名称不是 XML 内置的,它们必须在 DTD 中定义。)

    当然,这可能不是您的大型源文档中唯一出现这种实体引用的地方。

    您的文档包含对 DTD dblp.dtd 的引用。有两种可能性:要么实体没有在 DTD 中定义,要么由于某种原因您的解析器没有拾取它。我认为 dplp 是一个众所周知且广泛使用的数据集(由技术上非常称职的人创建),所以我认为第一种解释不太可能,除非发生了一些不正确的预处理导致数据损坏。第二种可能性似乎更大。在这一点上,我无法再提供帮助,因为我对您正在使用的 Python 解析器或其配置设置一无所知。

    【讨论】:

    • 只是添加一些信息:由于一些奇怪的历史原因,dblp.xml 使用 dblp.dtd 文件的本地 SYSTEM 声明。因此,需要将 DTD 文件与 XML 文件一起下载。根据要使用的解析器,需要将 dblp.dtd 复制到包含 dblp.xml 的目录或脚本的当前工作目录(或两者兼有,只是为了确定)。或者,当然也可以只编辑下载的 dblp.xml 的 DOCTYPE 声明,以使用位于 dblp.uni-trier.de/xml/dblp.dtd 的公开可用的 DTD 文件。
    【解决方案2】:

    问题可能来自引用的“dblp.dtd”。

    “DTD 的目的是定义 XML 文档的结构”,它可以定义像 &lt;!ENTITY ouml...&gt; 这样的实体

    查看this 来解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2015-12-10
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多