我有一个xml文档,它由一个我无法更改的进程生成。它看起来有点像这样:
<root>
<foo bar="..." baz="..."/>
<foo bar="..." baz="..."/>
<foo bar="..." baz="..."/>
<foo/>
<foo/>
</root>
我有一个架构设置要求foo元素上的属性baz和bar,因为它们是读取文件以正确运行的程序所必需的。但是,生成xml的程序有时会在末尾添加一个或多个空foo元素,如上所示。这会导致架构验证失败,但我不想放松架构以允许空的foo元素,因为这可能导致程序失败。
有没有人建议解决这个问题的最佳方法是什么?到目前为止我唯一想到的解决方案是预处理xml,删除任何空的foo元素,但它有点可怕。
答案 0 :(得分:1)
在XSD 1.0中没有办法说某些foo元素具有从其他foo(兄弟)元素应用的不同验证规则。您可以使用断言在XSD 1.1中执行此操作。
在验证之前进行转换实际上并不是一件坏事。如果您知道在验证文档之前需要从文档中删除哪些噪声然后进行实际处理,那么在验证之前将转换步骤插入管道可能是一种非常有效的技术。