我正在寻找一个用于python的XML解析器,其中包含每个节点中的一些调试信息,例如节点开始的行号和列。理想情况下,它将是一个与xml.etree.ElementTree.XMLParser
兼容的解析器,即我可以传递给xml.etree.ElementTree.parse
的解析器。
我知道这些解析器实际上并没有产生这些元素,所以我不确定它是如何工作的,但它似乎是一个非常有用的东西,如果没有身体,我会感到惊讶。 XML中的语法错误是一回事,但如果您无法指向源文件/字符串中的特定位置,则生成的结构中的语义错误可能难以调试。
答案 0 :(得分:1)
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'