【发布时间】:2019-01-05 11:06:32
【问题描述】:
当我们使用 Saxon 时,有时会向控制台输出如下:
第 2 行第 6 列的警告 在 {\n\t\t\t\ttrue\n\t\t\t\tBest} 中: 表达式正在寻找一个名为 'true' 的子元素 - 也许 true() 是 故意的?要避免此警告,请使用 child::true 或 ./true。 第 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 日志中。这些可能是一个文件,但它们可以是很多其他的东西,我们希望它转到用户配置的任何日志监听器。
有没有办法做到这一点?
【问题讨论】:
-
错误 ATE-1221(内部注释)
-
那么你如何使用Saxon,我想你需要分享相关代码,以便其他人就如何重定向消息提出建议。当然,那里的特定警告会告诉您如何避免它。 saxonica.com/html/documentation/configuration/… 将
STANDARD_ERROR_OUTPUT_FILE列为配置实例 -
@MartinHonnen - 我添加了上面的代码。提供文件名对我们来说效果不佳,因为我们想将这些警告发送到可能不是文件的 log4j/log4net 流。