XMLValidate

描述

此任务检查 XML 文件是否有效(或仅格式良好)。默认情况下,该任务使用 JAXP 提供的 SAX2 解析器实现(可能是 Apache Ant 本身使用的那个),但如果需要,可以指定任何 SAX1/2 解析器。

此任务支持使用嵌套的

警告:默认情况下,JAXP 创建一个非命名空间感知解析器。Ant 使用的 JAXP 实现默认情况下将 http://xml.org/sax/features/namespaces 功能设置为 false。要验证包含命名空间的文档,请通过嵌套以下元素显式地将命名空间功能设置为 true

<attribute name="http://xml.org/sax/features/namespaces" value="true"/>

例如,如果您在 XML 文件中使用 xsi:noNamespaceSchemaLocation 属性,则需要此命名空间支持功能。

如果您使用的是不是由 JAXP 生成的解析器,而是使用 xmlvalidateclassname 属性,则此警告可能不适用。

参数

属性 描述 必需
file 要检查的文件。 是,除非指定了嵌入的 <fileset>
lenient 如果为 true,则仅检查 XML 文档是否格式良好(如果指定的解析器是 SAX1 解析器,则忽略)。
classname 要使用的解析器。
classpathref 在何处查找解析器类。 否,可以使用嵌入的 <classpath> 元素
failonerror 如果设置为 true,则在错误时失败。 否;默认为 true
warn 记录解析器警告事件。

作为嵌套元素指定的参数

dtd

<dtd> 用于指定 DTD 解析的不同位置。

属性 描述 必需
publicId 要解析的 DTD 的公共 ID
location 要使用的 DTD 的位置,可以是文件、资源或 URL

xmlcatalog

The <xmlcatalog> 元素用于执行实体解析。

attribute

<attribute> 元素用于设置解析器功能。

此处定义了可与 Xerces 解析器一起使用的功能:设置功能

此处定义了 SAX 功能:SAX2 标准功能标志

属性 描述 必需
name 功能的名称
value 功能的布尔值

property

<property> 元素用于设置属性。这些属性在 Xerces XML 解析器实现中定义如下:XML 解析器属性。属性可用于设置用于验证 XML 文件的模式。

属性 描述 必需
name 功能的名称
value 属性的字符串值

示例

验证 toto.xml

<xmlvalidate file="toto.xml"/>

验证 src/style 中的所有 .xsl 文件,但如果出现错误,只发出警告,而不是停止构建。

<xmlvalidate failonerror="no" lenient="yes" warn="yes"
             classname="org.apache.xerces.parsers.SAXParser">
             classpath="lib/xerces.jar">
  <fileset dir="src" includes="style/*.xsl"/>
</xmlvalidate>

验证 struts 配置,使用 DTD 的本地副本。

<xmlvalidate file="struts-config.xml" warn="false">
  <dtd publicId="-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
       location="struts-config_1_0.dtd"/>
</xmlvalidate>

扫描项目中的所有 XML 文件,使用预定义的目录将 URI 映射到本地文件。

<xmlvalidate failonerror="no">
  <fileset dir="${project.dir}" includes="**/*.xml"/>
  <xmlcatalog refid="mycatalog"/>
</xmlvalidate>

扫描项目中的所有 XML 文件,使用内联定义的目录。

<xmlvalidate failonerror="no">
  <fileset dir="${project.dir}" includes="**/*.xml"/>
  <xmlcatalog>
    <dtd publicId="-//ArielPartners//DTD XML Article V1.0//EN"
         location="com/arielpartners/knowledgebase/dtd/article.dtd"/>
  </xmlcatalog>
</xmlvalidate>

使用配置为执行 XSD 验证的解析器验证 xml 目录中的所有 .xml 文件。注意:解析器必须支持 http://apache.org/xml/features/validation/schema 功能。The schemavalidate 任务更适合验证 W3C XML 模式,因为它使用正确启用的选项扩展了此任务,并使添加用作源的模式文件/URL 列表变得容易。

<xmlvalidate failonerror="yes" lenient="no" warn="yes">
  <fileset dir="xml" includes="**/*.xml"/>
  <attribute name="http://xml.org/sax/features/validation" value="true"/>
  <attribute name="http://apache.org/xml/features/validation/schema"  value="true"/>
  <attribute name="http://xml.org/sax/features/namespaces" value="true"/>
</xmlvalidate>

根据模式 xml/doc.xsd 验证文件 xml/endpiece-noSchema.xml

<!-- Convert path to URL format -->
<pathconvert dirsep="/" property="xsd.file">
<path>
   <pathelement location="xml/doc.xsd"/>
</path>
</pathconvert>

<xmlvalidate file="xml/endpiece-noSchema.xml" lenient="false" failonerror="true" warn="true">
  <attribute name="http://apache.org/xml/features/validation/schema" value="true"/>
  <attribute name="http://xml.org/sax/features/namespaces" value="true"/>
  <property name="http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"
            value="${xsd.file}"/>
</xmlvalidate>