2010-06-06 71 views
9

我想解析一个XML文件使用lxml。 xml.etree允许我简单地将文件名作为参数传递给parse函数,所以我试图用lxml做同样的事情。如何将xml文件传递给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 

我在做什么错?

+0

正如在接受的答案中所说的,'lxml'在这里没有任何问题,所以对问题进行了低估。也许重新命名问题的标题将避免错误地搜索此模块上的问题。 – 2011-10-18 08:41:15

+0

@Joel - 我的问题标题并不意味着'lxml'有什么问题 - 只是我将文件传递给lxml解析的方式可能有问题。如果你可以建议一个替代标题,那么我会很乐意承认(从你的评论中你不清楚你认为我应该改变它)。 – BeeBand 2011-10-20 15:10:11

+0

嗡嗡声。奇怪的是,我现在可以看到标题没有错:/所以也许我错过了正确的问题,并错误地勾选了你的问题!而且,如果不编辑问题,我无法删除downvote。如果你做一些编辑来解锁它,我很乐意纠正我的错误。 – 2011-10-20 15:42:18

回答

1

你在做什么错是(1)没有检查你是否通过在同一文件上使用xml.etree得到了相同的结果(2)没有读取错误信息,表示文件第2行的语法错误,从任何文件开放问题的下游流

+0

约翰,你的意思是“相同的结果”,与结果相同吗? – BeeBand 2010-06-07 10:32:08

+1

与lxml相同的结果,因此排除lxml作为问题 – 2010-06-07 10:36:57

0

您的XML标记中存在语法错误。你没有做错什么。

1

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

0

LXML允许你创建一个解析器实例加载一个破损的XML与recover=True

etree.XMLParser(recover=True) 

虽然这是不理想的,我使用它来加载架构/ DTD/Schematron验证的XML。