当我想针对服务器端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 Spy”或类似内容。
在验证的处理程序中,您应该收到带有该消息的SAXParseException,以及XML文件中的column number and the line number。不是这样的吗?
我们使用包含xmlparserv2.jar的Oracle's XDK (XML Development Kit)和一个验证解析器和XSLT 2.0。它使用JAXB API,因此您只需将其添加到类路径并更改导入。它会抛出不完美的错误,但我会说比你的例子更容易理解。
xmlstarlet(xmlstar.sourceforge.net/)是一个命令行工具包。您可以使用Runtime.exec()为给定的xml运行它(只要xml在文件中)。
我们使用Castor。
Castor是Java [tm]的开源数据绑定框架。它是Java对象,XML文档和关系表之间的最短路径。 Castor提供了Java到XML的绑定,Java到SQL的持久性等等。
如果您在解释Xerces错误时遇到问题,并希望能够突出显示文档中违反规则的位置,请查看一些XML创作工具,例如oXygen。
(来源:oxygenxml.com)
将架构与实例XML文档关联后,编辑器将突出显示文档的违规区域,并为您提供违规的描述。
另外,您可以使用不同的引擎来执行验证:
oXygen内置支持:Xerces,LIBXML,XSV,Saxon SA,MSXML4.0,MSXML .NET和SQC。