此任務會檢查 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 | 是 |
<xmlcatalog>
元素用於執行實體解析。
<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>