2010-06-11 167 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(); 
    }