带命名空间的ant中的XmlValidate

时间:2018-04-05 05:14:27

标签: ant xml-validation

如何使用Ant使用xmlvalidate任务验证这些xml和xsd文件。我已经尝试但没有得到解决方案。我可以得到一个解决方案

<property name="doc.xsd" location="${basedir}/test.xsd" />

<target name="FindDesc" >
   <xmlvalidate file="ab.xml" lenient="yes" failonerror="yes" warn="yes">
          <fileset dir="${basedir}" includes="ab.xsl" />
            <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"/>
          <property name="http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation" value="${doc.xsd}" />
      </xmlvalidate>


  </target> 

ab.xml文件

<?xml version="1.0"?>
<books xmlns="http://www.example.org/Test" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="test.xsd">
   <book id="bk001">
      <author>Writer</author>   
      <title>The First Book</title>
      <genre>Fiction</genre>
      <price>44.95</price>
      <pub_date>2000-10-01</pub_date>
      <review>An amazing story of nothing.</review>
   </book>

   <book id="bk002">
      <author>Poet</author>
      <title>The Poet's First Poem</title>
      <genre>Poem</genre>
      <price>24.95</price>
      <review>Least poetic poems.</review>
   </book>
</books>

test.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"  targetNamespace="http://www.example.org/Test"
           >

  <xsd:element name="books" >

   <xsd:complexType >
    <xsd:sequence>
     <xsd:element name="book" maxOccurs="unbounded" minOccurs="0">
     <xsd:complexType>
     <xsd:sequence>
      <xsd:element name="author"   type="xsd:string"/>
      <xsd:element name="title"    type="xsd:string"/>
      <xsd:element name="genre"    type="xsd:string"/>
      <xsd:element name="price"    type="xsd:float" />
      <xsd:element name="pub_date" type="xsd:date" />
      <xsd:element name="review"   type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="id"   type="xsd:string"/>
  </xsd:complexType>
</xsd:element>

</xsd:schema>

我试图使用带有Ant脚本的xsd架构测试xml我得到它不能正常工作我得到这样的错误

cvc-elt.1: Cannot find the declaration of element 'books'.  

和这些

TargetNamespace.2: Expecting no namespace, but the schema document has a target namespace of 'http://www.example.org/Test'.

没有命名空间的xml,但我想尝试通过ant脚本验证命名空间。 如果有任何错误我该怎么办请给出建议用ant脚本测试这些xml和xsd文件我已经通过xml验证和模式验证

1 个答案:

答案 0 :(得分:0)

我们可以使用SchemaValidation以简单快捷的方式使用xsd文件验证xml

如果有一个文件我们可以通过这个

  <schemavalidate>
<schema namespace="<schema_nameSpace>">
        file="abc.xml"/>
   </schemavalidate>

如果有多个文件,我们可以使用fileset

<schemavalidate warn="true" failonerror="true" fullchecking="true">
        <fileset dir="<Src_dir_for_Xml>">
            <include name="*.xml" />
        </fileset>
        <schema namespace="<Your schema name space>" file="<schema_src_dir_For_schema" />
    </schemavalidate>