You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Saxonche获取XPath匹配的XML元素行号?

解决PySaxonche获取XML元素行号的问题

要获取匹配XPath的元素行号,你已正确启用行号功能,但核心问题是没有调用XdmNode对象的行号获取方法。以下是修正后的方案:

关键要点

  • 启用行号仅需调用doc_builder.set_line_numbering(True)即可,无需额外设置配置属性'l'(该参数属于Saxon命令行工具的用法,不适用于API调用)。
  • xpath_processor.evaluate()返回的是XdmValue集合,其中每个元素是XdmNode对象,行号需要通过调用该对象的get_line_number()方法主动获取,不会直接在调试器的属性列表中显示。

修正后的代码

from saxonche import XdmNode

input_file_path = 'test.xml'
input_xpath = './/foo'

with PySaxonProcessor(license=False) as saxon_proc:
    doc_builder = saxon_proc.new_document_builder()
    # 启用行号
    doc_builder.set_line_numbering(True)

    xml_tree = doc_builder.parse_xml(xml_file_name=input_file_path)
    xpath_processor = saxon_proc.new_xpath_processor()
    xpath_processor.set_context(xdm_item=xml_tree)

    foo_elements = xpath_processor.evaluate(input_xpath)
    # 遍历匹配结果,提取每个元素的行号
    for elem in foo_elements:
        if isinstance(elem, XdmNode):
            print(f"匹配元素行号: {elem.get_line_number()}")

补充说明

  • 针对你提供的test.xml,运行代码后会输出匹配元素行号: 2,与XML中<foo>标签所在的行完全对应。
  • 若代码未导入XdmNode,需添加开头的导入语句以完成类型判断(也可省略类型判断直接调用方法,但添加判断能提升代码稳定性)。

内容的提问来源于stack exchange,提问作者Rainbolt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:05:07