如何使用复杂的验证规则验证XML文档?

时间:2013-09-02 06:41:23

标签: xml validation xsd

我必须验证具有许多复杂验证规则的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

1 个答案:

答案 0 :(得分:0)

Java是Turing-complete; XSD不是。因此,我们可以在Java中表达的约束无法在XSD中表达。 (它还表明[其他条件相同]在XSD中表达的约束比包含在Java中表达的等效约束更不可能包含错误。)

是否可以在XSD中表达任何给定的约束集取决于约束。从您的示例中,很难说:您的主要结构似乎说如果文档的根元素名为aaa,那么还应该有一个名为bbb的根元素,但不是根名为ccc的元素。这是荒谬的。