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

在saxonche Python模块中使用collection()函数返回None的问题求助

问题:Saxonche Python模块中collection()返回None的解决方法

尝试使用saxonche的collection()函数获取当前目录下所有XML文档,但返回结果为None,代码如下:

from saxonche import PySaxonProcessor
from os import getcwd

with PySaxonProcessor(license=False) as proc:
    print(proc.version)
    xq = proc.new_xquery_processor()
    xq.set_query_base_uri(getcwd())
    xq.set_query_content("collection('.')/node()")
    r = xq.run_query_to_value()
    print(r)
解决建议
  • 显式指定XML文件匹配规则:collection()默认不会自动筛选XML文件,需在路径后添加筛选参数。修改查询语句为:
    collection('./?select=*.xml')/node()
    
    这样会精准匹配当前目录下的所有.xml文件。
  • 验证当前目录的XML文件存在性:确认执行代码的工作目录下确实有XML文档,空目录会导致collection()返回空结果。
  • 使用绝对路径URI:相对路径可能因上下文解析问题失效,直接传入绝对路径(注意URI格式):
    import os
    abs_path = os.path.abspath('.').replace(os.sep, '/')
    query = f"collection('file:///{abs_path}/?select=*.xml')/node()"
    xq.set_query_content(query)
    
  • 检查Saxon配置项:如果需要递归遍历子目录或调整集合处理规则,可通过配置属性设置:
    xq.set_configuration_property("collection.recursive", "true")
    
  • 替代方案:遍历文件逐个加载:若collection()仍有问题,可先用Python枚举XML文件,再通过doc()函数逐个加载:
    from saxonche import PySaxonProcessor
    from os import listdir, getcwd
    
    with PySaxonProcessor(license=False) as proc:
        print(proc.version)
        xq = proc.new_xquery_processor()
        xml_files = [f for f in listdir(getcwd()) if f.lower().endswith('.xml')]
        for file in xml_files:
            xq.set_query_content(f"doc('{file}')/node()")
            result = xq.run_query_to_value()
            print(result)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:20:22