在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
相关产品推荐
相关产品推荐

