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

如何移除SaxonC-HE输出至stderr的错误与警告信息?

解决SaxonC-HE错误/警告输出到stderr的问题

要阻止SaxonC-HE将错误和警告输出到stderr(即便已捕获SaxonApiException),可以通过以下两种可靠方法实现:

方法一:自定义错误监听器(推荐)

SaxonC允许通过设置自定义ErrorListener来接管错误/警告的处理逻辑,完全控制是否输出到stderr。以Python绑定为例:

from saxonc import *

class SilentErrorListener(ErrorListener):
    def warning(self, exception):
        # 忽略警告,不输出到stderr
        pass
    
    def error(self, exception):
        # 忽略普通错误,如需自定义日志可在此添加逻辑
        pass
    
    def fatalError(self, exception):
        # 致命错误可按需处理,此处选择不输出
        pass

# 初始化处理器并应用自定义监听器
with PySaxonProcessor(license=False) as proc:
    xslt_processor = proc.new_xslt30_processor()
    xslt_processor.set_error_listener(SilentErrorListener())
    
    try:
        # 执行你的XSLT转换或XQuery操作
        result = xslt_processor.transform_to_string(source_file="input.xml", stylesheet_file="transform.xsl")
    except SaxonApiException as e:
        # 在这里处理捕获到的异常,比如写入自定义日志
        print(f"处理失败: {e.message}")

其他语言绑定(如Java、C#)的逻辑类似:只需实现对应语言的ErrorListener/IErrorListener接口,覆盖相关方法并空实现即可。

方法二:临时重定向stderr(快速解决)

如果不需要精细控制,可临时将stderr重定向到空缓冲区,执行完Saxon操作后再恢复原始流。同样以Python为例:

import sys
from io import StringIO
from saxonc import *

# 保存原始stderr流
original_stderr = sys.stderr
try:
    # 将stderr重定向到内存缓冲区(不输出到控制台/日志文件)
    sys.stderr = StringIO()
    
    with PySaxonProcessor(license=False) as proc:
        xslt_processor = proc.new_xslt30_processor()
        try:
            result = xslt_processor.transform_to_string(source_file="input.xml", stylesheet_file="transform.xsl")
        except SaxonApiException as e:
            print(f"处理失败: {e.message}")
finally:
    # 恢复原始stderr流,避免影响后续代码
    sys.stderr = original_stderr

注意事项

  • 自定义错误监听器更优雅,能精准区分Saxon的错误类型并按需处理,不会影响其他程序的stderr输出。
  • 重定向stderr的方法较为粗暴,会屏蔽所有输出到stderr的内容,包括非Saxon产生的信息,需谨慎使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:02:36