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

<xmlcatalog> 元素用於執行實體解析。

attribute

<attribute> 元素用於設定解析器功能。

可與 Xerces 解析器一起使用的功能在此定義:設定功能

SAX 功能在此定義:SAX2 標準功能旗標

屬性 說明 必要
名稱 功能的名稱
功能的布林值

屬性

<property> 元素用於設定屬性。這些屬性在此定義,供 Xerces XML 解析器實作使用:XML 解析器屬性。屬性可設定用於驗證 XML 檔案的架構。

屬性 說明 必要
名稱 功能的名稱
屬性的字串值

範例

驗證 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>

使用 DTD 的本機副本驗證 Struts 組態。

<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>

使用預先定義的目錄,將 URI 對應到本機檔案,掃描專案中的所有 XML 檔案。

<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 功能。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>