【问题标题】:how to pass an xml file to lxml to parse?如何将 xml 文件传递​​给 lxml 进行解析?
【发布时间】:2010-06-06 13:19:19
【问题描述】:

我正在尝试使用 lxml 解析 xml 文件。 xml.etree 允许我简单地将文件名作为参数传递给parse 函数,所以我尝试对 lxml 做同样的事情。

我的代码:

from lxml import etree
from lxml import objectify

file = "C:\Projects\python\cb.xml"
tree = etree.parse(file)

但我得到了错误:

Traceback (most recent call last):
  File "cb.py", line 5, in <module>
    tree = etree.parse(file)
  File "lxml.etree.pyx", line 2698, in lxml.etree.parse (src/lxml/lxml.etree.c:4
9590)
  File "parser.pxi", line 1491, in lxml.etree._parseDocument (src/lxml/lxml.etre
e.c:71205)
  File "parser.pxi", line 1520, in lxml.etree._parseDocumentFromURL (src/lxml/lx
ml.etree.c:71488)
  File "parser.pxi", line 1420, in lxml.etree._parseDocFromFile (src/lxml/lxml.e
tree.c:70583)
  File "parser.pxi", line 975, in lxml.etree._BaseParser._parseDocFromFile (src/
lxml/lxml.etree.c:67736)
  File "parser.pxi", line 539, in lxml.etree._ParserContext._handleParseResultDo
c (src/lxml/lxml.etree.c:63820)
  File "parser.pxi", line 625, in lxml.etree._handleParseResult (src/lxml/lxml.e
tree.c:64741)
  File "parser.pxi", line 565, in lxml.etree._raiseParseError (src/lxml/lxml.etr
ee.c:64084)
lxml.etree.XMLSyntaxError: AttValue: " or ' expected, line 2, column 26

我做错了什么?

【问题讨论】:

  • 正如在接受的答案中所说,lxml 这里没有问题,所以对这个问题投反对票。也许重命名问题的标题可以避免在这个模块上错误地搜索问题。
  • @Joel - 我的问题标题并不暗示 lxml 有什么问题 - 只是我将文件传递给 lxml 进行解析的方式可能有问题。如果您可以建议一个替代标题,那么我很乐意提供(从您的评论中不清楚您认为我应该将其更改为什么)。
  • 哼。奇怪,我现在看不出标题有什么问题:/所以也许我错过了正确的问题,并错误地勾选了你的问题!而且,如果您不编辑问题,我无法删除反对票。如果您稍作修改以解锁它,我很乐意纠正我的错误。

标签: python lxml


【解决方案1】:

你做错的是(1)没有检查你是否在同一个文件上使用xml.etree 得到相同的结果(2)没有读取错误消息,这表明文件第2行有语法错误,任何文件打开问题的下游

【讨论】:

  • 约翰,你所说的“同样的结果”是什么意思,和什么结果一样?
  • 与 lxml 的结果相同,因此排除了 lxml 的问题
【解决方案2】:

今天早上我偶然发现了一条类似的错误消息,对我来说,答案是格式错误的 DTD。在我的 DTD 中,有一个没有用引号括起来的默认值的属性定义 - 一旦我更改了它,错误就不再发生了。

【讨论】:

    【解决方案3】:

    您的 XML 标记 中有语法错误。你没有做错任何事。

    【讨论】:

      【解决方案4】:

      lxml 允许您通过使用 recover=True 创建解析器实例来加载损坏的 xml

      etree.XMLParser(recover=True)
      

      虽然这并不理想,但我使用它来加载 xml 以进行 schema/dtd/schematron 验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多