我们使用什么来针对XML模式进行验证?
时间:2020-03-06 14:55:57 来源:igfitidea点击:
当我想根据服务器端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间谍"或者类似内容。
解决方案
我们使用Oracle的XDK(XML开发套件),其中包括带有验证解析器的xmlparserv2.jar和XSLT 2.0。它使用JAXB API,因此我们只需要将其添加到类路径并更改导入即可。它会引发不完美的错误,但是我想说的比示例更容易理解。
xmlstarlet(xmlstar.sourceforge.net/)是一个命令行工具包。我们可以使用Runtime.exec()对给定的xml运行它(只要xml在文件中)。
我们使用Castor。
Castor is an Open Source data binding framework for Java[tm]. It's the shortest path between Java objects, XML documents and relational tables. Castor provides Java-to-XML binding, Java-to-SQL persistence, and more.
在验证的处理程序中,我们应该收到带有该消息的SAXParseException以及XML文件中的列号和行号。不是吗
如果我们在解释Xerces错误时遇到困难,并且想要突出显示文档中违反规则的地方,请查看一些XML创作工具,例如oXygen。
替代文字http://www.oxygenxml.com/img/errorsOverviewRuler.gif
将架构与实例XML文档相关联后,编辑器将突出显示该文档的有问题的区域,并为我们提供有关违规的描述。
另外,我们可以使用不同的引擎来执行验证:
oXygen has built-in support for: Xerces, LIBXML, XSV, Saxon SA, MSXML4.0, MSXML .NET and SQC.