包含调试信息的XML解析器

0 投票
1 回答
682 浏览
提问于 2025-04-18 11:13

我在找一个适用于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'

撰写回答