2010-06-06 79 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。