我必须验证具有许多复杂验证规则的XML。我正在考虑定义一个XSD文件来自动进行验证,但是有些复杂的文件无法在XSD中定义。
现在我必须编写很多java代码来通过xpath获取值,逐个验证它们,这对代码和测试来说非常无聊。
我正在寻找一种简单的方法,是否有XML的验证库?或者我们可以在java中定义一些非常复杂的验证规则并与XSD一起使用吗?
更新:
我忘了提到,我需要在错误消息中添加一些错误代码,以帮助其他团队处理错误。我不确定XSD是否可以让我这样做。
再次更新:
一个复杂的规则:(以下路径位于文档的节点下,比如说/my-node
,而不是根目录)
if /aaa exists
/bbb should exist
/ccc should not exist, and
if /aaa's value is 111:
/bbb's value should be 222
if /aaa's value is 555:
/bbb's value should be 666
else
/bbb should not exist
/ccc should exist, and its value should not be number
答案 0 :(得分:0)
Java是Turing-complete; XSD不是。因此,我们可以在Java中表达的约束无法在XSD中表达。 (它还表明[其他条件相同]在XSD中表达的约束比包含在Java中表达的等效约束更不可能包含错误。)
是否可以在XSD中表达任何给定的约束集取决于约束。从您的示例中,很难说:您的主要结构似乎说如果文档的根元素名为aaa
,那么还应该有一个名为bbb
的根元素,但不是根名为ccc
的元素。这是荒谬的。