2010-06-11 124 views
-1

我想知道如何使用XSD驗證XML。 XML不是元素類型,而是複雜類型。由於驗證器類的驗證方法僅比較元素類型。使用XML驗證XSD

所以基本上我想用XSD來消除XSD的複雜類型。

例如

基本XSD下面

xs:element name="Customer"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Dob" type="xs:date" /> 
     <xs:element name="Address"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="Line1" type="xs:string" /> 
      <xs:element name="Line2" type="xs:string" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

我們可以假設我們在客戶多元素複雜類型。

我的XML是

<Address> 
    <Line1>34 thingy street, someplace</Line1> 
    <Line2>sometown, w1w8uu </Line2> 
</Address> 

我如何驗證我的XML與XSD。 請發表您的建議在Java

+1

「請張貼在Java中你的建議」,是說「給我codez」的一個很好的方式,但在本質上它仍然是相同的。請下次張貼你自己的代碼,並附上解釋你被卡住的原因,這樣人們就會發現你並不只是懶惰。 – Tomalak 2010-06-11 11:06:35

+0

嗨Tomalak,它不是懶惰。有些功能可用一種語言提供,而其他語言不提供。可以用其他語言給出解決方案,這在java中可能不可能。 – munish 2010-07-20 05:21:25

+0

你有什麼嘗試,你會得到什麼錯誤? 'Validator.validate()'對模式驗證xml,那麼你還需要什麼? – Alberto 2014-07-21 07:20:35

回答

1

喜歡的東西

import javax.xml.validation.Schema; 
import javax.xml.validation.SchemaFactory; 
import javax.xml.validation.Validator; 

// ..... 


    try { 
     File xmlFile // read XML file 

     File xsdFile // read XSD file 

     Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(xsdFile); 
     Validator validator = schema.newValidator(); 
     validator.validate(new StreamSource(xmlFile)); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }