当我想针对服务器端Java中的模式验证XML文档时,我使用内置的JRE Xerces实现和javax.xml.validation.Schema。它工作正常,但是当验证失败时,Xerces会提供非常接近无用的错误消息,例如:

cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'PopulatedStringType'

这些可能需要一段时间来诊断和追踪未通过验证的XML文档的特定部分,并且所有这些都是因为错误消息不佳。

所以我的问题是,您是否使用另一种方法来验证针对Schema的XML,这会在验证失败时提供更有用的输出?

请注意,这不是服务器端Java,因此请不要说“使用XML间谍”。或类似的。

有帮助吗?

解决方案

在验证的处理程序中,您应该收到带有该消息的SAXParseException,以及 XML文件中的列号和行号。不是这样的吗?

其他提示

我们使用 Oracle的XDK(XML开发工具包),其中包括带有验证解析器和XSLT 2.0的xmlparserv2.jar。它使用JAXB API,因此您只需将其添加到类路径并更改导入。它会抛出不完美的错误,但我会说比你的例子更容易理解。

xmlstarlet(xmlstar.sourceforge.net/)是一个命令行工具包。您可以使用Runtime.exec()为给定的xml运行它(只要xml在文件中)。

我们使用 Castor

  

Castor是Java [tm]的开源数据绑定框架。它是Java对象,XML文档和关系表之间的最短路径。 Castor提供了Java-to-XML绑定,Java-to-SQL持久性等等。

如果您在解释Xerces错误时遇到问题,并希望能够突出显示文档中违反规则的位置,请查看一些XML创作工具,例如 oXygen


(来源: oxygenxml.com

将架构与实例XML文档关联后,编辑器将突出显示文档的违规区域,并为您提供违规的描述。

另外,您可以使用不同的引擎来执行验证:

  

oXygen内置支持:   Xerces,LIBXML,XSV,Saxon SA,   MSXML4.0,MSXML .NET和SQC。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top