此任务检查 XML 文件是否有效(或仅格式良好)。默认情况下,该任务使用 JAXP 提供的 SAX2 解析器实现(可能是 Apache Ant 本身使用的那个),但如果需要,可以指定任何 SAX1/2 解析器。
此任务支持使用嵌套的
<xmlcatalog> 元素<dtd> 元素用于解析 DTD 和实体<attribute> 元素用于在解析器上设置功能。这些可以是任何数量的 http://xml.org/sax/features/ 或解析器可能支持的其他功能。<property> 元素,包含字符串属性警告:默认情况下,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 生成的解析器,而是使用 xmlvalidate 的 classname 属性,则此警告可能不适用。
| 属性 | 描述 | 必需 |
|---|---|---|
| file | 要检查的文件。 | 是,除非指定了嵌入的 <fileset> |
| lenient | 如果为 true,则仅检查 XML 文档是否格式良好(如果指定的解析器是 SAX1 解析器,则忽略)。 |
否 |
| classname | 要使用的解析器。 | 否 |
| classpathref | 在何处查找解析器类。 | 否,可以使用嵌入的 <classpath> 元素 |
| failonerror | 如果设置为 true,则在错误时失败。 |
否;默认为 true |
| warn | 记录解析器警告事件。 | 否 |
<dtd> 用于指定 DTD 解析的不同位置。
| 属性 | 描述 | 必需 |
|---|---|---|
| publicId | 要解析的 DTD 的公共 ID | 是 |
| location | 要使用的 DTD 的位置,可以是文件、资源或 URL | 是 |
The <xmlcatalog> 元素用于执行实体解析。
<attribute> 元素用于设置解析器功能。
此处定义了可与 Xerces 解析器一起使用的功能:设置功能
此处定义了 SAX 功能:SAX2 标准功能标志
| 属性 | 描述 | 必需 |
|---|---|---|
| name | 功能的名称 | 是 |
| value | 功能的布尔值 | 是 |
<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 文件。注意:解析器必须支持 https://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="https://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="https://apache.org/xml/features/validation/schema" value="true"/>
<attribute name="http://xml.org/sax/features/namespaces" value="true"/>
<property name="https://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"
value="${xsd.file}"/>
</xmlvalidate>