2014-06-26 104 views
0

我正在尋找一個Python的XML解析器,包括在每個節點中的某些調試信息,例如行數和列的節點位置開始。理想情況下,這將是一個解析器與xml.etree.ElementTree.XMLParser相容,即,一個我可以傳遞給xml.etree.ElementTree.parseXML解析器包含調試信息

我知道這些解析器實際上並不產生的元素,所以我不知道如何做到這一點真的管用,但似乎這樣的一個有用的東西,我會感到驚訝,如果沒有身體有一個。在XML語法錯誤是一回事,但在最終的結構語義錯誤可能很難調試,如果你不能指向源文件/串中的某個位置。

回答

1

指向一個元素與XPath(LXML - getpath

lxml報價爲尋找文件中的元素的XPath。

有測試文檔:

>>> from lxml import etree 
>>> xmlstr = """<root><rec id="01"><subrec>a</subrec><subrec>b</subrec></rec> 
... <rec id="02"><para>graph</para></rec> 
... </root>""" 
... 
>>> doc = etree.fromstring(xmlstr) 
>>> doc 
<Element root at 0x7f61040fd5f0> 

我們挑一個元素<para>graph</para>

>>> para = doc.xpath("//para")[0] 
>>> para 
<Element para at 0x7f61040fd488> 

的XPath都有其意義,如果我們有清晰的脈絡,在這種情況下,它是XML文檔的根目錄:

>>> root = doc.getroottree() 
>>> root 
<lxml.etree._ElementTree at 0x7f610410f758> 

現在我們可以問,什麼xpath從根到達我們的元素興趣:

>>> root.getpath(para) 
'/root/rec[2]/para'