包含调试信息的XML解析器
我在找一个适用于Python的XML解析器,想要它在每个节点中包含一些调试信息,比如节点开始的行号和列号。理想情况下,这个解析器应该和xml.etree.ElementTree.XMLParser
兼容,也就是说,我可以把它传给xml.etree.ElementTree.parse
来使用。
我知道这些解析器实际上并不会生成元素,所以我不太确定这具体是怎么工作的,但这听起来真是个很有用的功能,如果没有人做过我会很惊讶。XML中的语法错误是一回事,但如果在生成的结构中出现语义错误,如果你不能指向源文件或字符串中的具体位置,那就很难调试了。
1 个回答
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'