我正在尝试使用Ant任务来验证XMLValidate文档。问题不是它不工作,而是它工作得太好了。我的DTD包含一个xref元素,该元素具有IDREF类型的"@linkend“属性。这些引用ID中的大多数都在当前文档之外。正因为如此,我的构建失败了,因为解析器报告IDREF引用的ID不存在。那么,有没有办法根据DTD验证我的XML文档,而忽略这种类型的错误呢?
我尝试了一些方法:在XMLValidate上设置"lenient“选项使任务只检查文档的格式良好性,而不检查它对DTD的有效性。The XMLValidate task in the Ant manual列出了一些可以设置的JAXP和SAX选项,但似乎没有一个是适用的。
下面是我的代码:
<target name="validate">
<echo message="Validating ${input}"/>
<xmlvalidate file="${input}" failonerror="yes"
classname="org.apache.xml.resolver.tools.ResolvingXMLReader">
<classpath refid="xslt.processor.classpath"/>
</xmlvalidate>
</target>正如您所看到的,我正在使用ResolvingXMLReader根据公共标识符的目录解析DTD。但是,如果我使用嵌套的xmlcatalog元素直接指定DTD,则会得到相同的行为。
发布于 2008-10-22 01:18:53
您的问题源于DTD的两种解释之间的差异:您的和spec's :-)。IDREF必须引用同一文档中的ids,而您的引用跨文档的元素。
我的建议是创建您自己的DTD版本,为该属性指定NMTOKEN而不是IDREF,并使用它来执行验证。这将确保内容将是有效的xml id值。
发布于 2008-10-06 12:11:26
不确定这是否有帮助,但您可以尝试此解决方法吗?创建一个临时文件,合并所有的XML,然后执行验证。
https://stackoverflow.com/questions/171097
复制相似问题