2010-05-13 165 views
1

我想用Java解析XML文件,並在與XSD模式相同的步驟中對其進行驗證。一個XML文件可能包含多個方案的內容,如:用Java中的多個XSD驗證XML

<outer xmlns="my.outer.namespace" xmlns:x="my.third.namespace"> 
    <foo>hello</foo> 
    <inner xmlns="my.inner.namespace"> 
     <bar x:id="bar">world</bar> 
    </inner> 
</outer> 

鑑於可提供相應的XSD文件命名空間,但使用的命名空間解析之前未知。如果一個模式爲屬性定義默認值,我也想以某種方式知道。

我能夠驗證一個文件,如果模式是已知的,我能夠解析文件而無需驗證,我實現了一個LSResourceResolver。但是,我無法一起工作。我該如何設置我的(SAX)解析器?

回答

5

誰曾經設計了Java的XML API,必須使用藥物已經...

public void parseAndValidate(File xmlFile, ContentHandler handler) { 
    SchemaFactory schemaFactory = 
      SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    schemaFactory.setResourceResolver(new MySchemaResolver()); 
    Schema schema = schemaFactory.newSchema(); 

    Validator v = schema.newValidator(); 
    v.setResourceResolver(schemaFactory.getResourceResolver()); 

    InputSource is = new InputSource(new FileInputStream(xmlFile)); 
    v.validate(new SAXSource(is), new SAXResult(handler)); 
}