如何更改“级别”验证Ant的XMLValidate任务提供了什么?

StackOverflow https://stackoverflow.com/questions/171097

  •  05-07-2019
  •  | 
  •  

我正在尝试使用Ant的XMLValidate任务来针对DTD验证XML文档。问题不是它不起作用,而是它运作得很好。我的DTD包含一个带有“@ linkend”的外部参照元素。 IDREF类型的属性。当前文档之外的大多数参考ID。因此,我的构建失败,因为解析器抱怨IDREF引用的ID不存在。那么,有什么方法可以针对DTD验证我的XML文档,但忽略这种类型的错误?

我尝试过的一些事情:设置“宽松” XMLValidate上的选项使任务只检查文档的格式,而不是它对DTD的有效性。 Ant手册中的XMLValidate任务列出了您可以设置的一些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,我会得到相同的行为。

有帮助吗?

解决方案

你的问题来自DTD的两种解释之间的区别:你的,以及 spec's :-)。 IDREF必须引用同一文档中的ID,而您的文档引用文档中的元素。

我的建议是创建自己的DTD版本,为该属性指定NMTOKEN而不是IDREF,并使用它来执行验证。这将确保内容将是有效的xml id值。

其他提示

不确定这是否有帮助,但您可以尝试这种解决方法吗? 创建一个临时文件,合并所有XML,然后进行验证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top