2013-11-21 68 views
2

我有一個很大的XML文件,我想對照XSD進行驗證。但是從大的XML文件,我只想要一個元素如何通過驗證在JAXB中部分解析xml?

這是我的示例XML

<Something> 
    <Element1>element</Element1> 
    <IDontWantThis>element</IDontWantThis> 
<Something> 

這是我的POJO,所以我不包括IDontWantThis

@XmlRootElement(name = "Something") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Something { 

    @XmlElement(name = "Element1") 
    private String element1; 

} 

這是我怎麼解析我的XML

 StreamSource source = new StreamSource(filePath); 

     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = sf.newSchema(new File(XSD)); 

     Unmarshaller u = JAXBContext.newInstance(Something.class).createUnmarshaller(); 
     u.setSchema(schema); 
     u.setEventHandler(new MyValidationEventHandler()); 
     Products products = u.unmarshal(source, Something.class).getValue(); 

但是當我運行我的應用程序得到這個錯誤

unexpected element (uri:"urn:blah", local:"IDontWantThis"). Expected elements are <{urn:blah}Element1>,<{urn:blah}Element1> 

我該如何解析partial元素,因爲我的xml非常大,並且包含很多我不需要使用的元素。

+0

更改您的架構以適應[anyelement](http://www.w3schools.com/schema/schema_complex_any.asp) – Yaneeve

回答

1

MyValidationEventHandler是您寫入自定義手形錯誤的類。如果你想忽略一個錯誤,你只需要把邏輯放在那裏。

+0

但我不想忽略錯誤我只是不想分析元素我不打算使用。 – toy

+0

@toy - 您需要在實現「ValidationEventHandler」時從'handleEvent'方法返回true以繼續解析。你可以保持'ValidationEvent'並在最後報告你想要的任何錯誤。 –