此任务检查 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 文件。注意:解析器必须支持 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>