java - 关闭撒克逊输出到控制台
问题描述
当我们使用 Saxon 时,有时我们会得到控制台的输出,例如:
{\n\t\t\t\ttrue\n\t\t\t\tBest} 中第 2 行第 6 列的警告:表达式正在寻找名为“true”的子元素 - 也许 true() 是有意的?要避免此警告,请使用 child::true 或 ./true。{... Alternatives} 中第 2 行第 6 列的警告:表达式正在寻找名为“false”的子元素 - 也许 false() 是有意的?要避免此警告,请使用 child::false 或 ./false。
有没有办法关闭它?还有一种方法可以将它提供给我们正在使用的 log4j/log4net 实例吗?
我们按如下方式创建编译器(我们在代码中执行 XPath 2.0 查询 - Java & .NET):
XMLReader reader = XMLReaderFactory.createXMLReader();
InputSource xmlSource = new InputSource(xmlData);
SAXSource saxSource = new SAXSource(reader, xmlSource);
Source schemaSource = new StreamSource(schemaFile);
Configuration config = createEnterpriseConfiguration();
config.addSchemaSource(schemaSource);
Processor processor = new Processor(config);
SchemaValidator validator = new SchemaValidatorImpl(processor);
DocumentBuilder doc_builder = processor.newDocumentBuilder();
if (!preserveWhiteSpace)
doc_builder.setWhitespaceStrippingPolicy(WhitespaceStrippingPolicy.ALL);
doc_builder.setSchemaValidator(validator);
XdmNode root_node = doc_builder.build(saxSource);
XPathCompiler compiler = processor.newXPathCompiler();
compiler.setSchemaAware(true);
我不能给出日志文件名,因为我们希望它出现在我们正在创建的 log4j/log4net 日志中。这些可能是一个文件,但它们可以是很多其他的东西,我们希望它转到用户配置的任何日志监听器。
有没有办法做到这一点?
解决方案
这些消息被发送到注册的ErrorListener
,调用它的warning()
方法。在独立 XPath 评估的情况下,这将ErrorListener
在Configuration
. 您可以通过多种方式重定向它:
(a)您可以编写自己的ErrorListener
代码来做它想做的任何事情(也许通过继承标准的)
(b)您可以StandardErrorListener
注册Configuration
并调用其setLogger()
方法以将其输出重定向到您自己的实现net.sf.saxon.lib.Logger
(可能是调用 log4j 的实现)。
(c) 您可以继续使用StandardLogger
, 使用的,StandardErrorListener
但将其输出重定向到不同的PrintStream
.
不幸的是,虽然 XSLT 和 XQuery 允许在单个转换或查询级别进行控制,但对于独立的 XPath,它必须是配置范围的。
深思熟虑
我应该提到这些特定的警告也可以使用配置选项来抑制FeatureKeys.SUPPRESS_XPATH_WARNINGS
推荐阅读
- r - 在R中,在tidymodels的配方中选择X个第一个PCA组件
- javascript - 有哪些方法可以清理异步代码以提高可读性?
- java - Spring不使用测试配置bean进行测试
- javascript - 将 document.querySelector 或 document.querySelectorAll 的结果转换为 jquery 对象,反之亦然,无需重新选择?
- r - 如何使用第二个数据框对数据框进行子集化
- apache-kafka - Debezium 与 Kafka 版本的兼容性
- reactjs - 如何使用Context使snackbar成为全局组件
- python - 如何在 altair 中隐藏彩条/图例?
- javascript - 将道具传递给路由器链接 - Vue.js
- python - 安装 pyinstaller 时出错