2010-05-13 167 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)); 
}