包含调试信息的XML解析器

时间:2014-06-26 16:27:57

标签: python xml xml-parsing

我正在寻找一个用于python的XML解析器,其中包含每个节点中的一些调试信息,例如节点开始的行号和列。理想情况下,它将是一个与xml.etree.ElementTree.XMLParser兼容的解析器,即我可以传递给xml.etree.ElementTree.parse的解析器。

我知道这些解析器实际上并没有产生这些元素,所以我不确定它是如何工作的,但它似乎是一个非常有用的东西,如果没有身体,我会感到惊讶。 XML中的语法错误是一回事,但如果您无法指向源文件/字符串中的特定位置,则生成的结构中的语义错误可能难以调试。

1 个答案:

答案 0 :(得分: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'