2010-05-13 1 views
1

Java로 XML 파일을 구문 분석하고 XSD 스키마와 동일한 단계에서 유효성을 검사하려고합니다. XML 파일은 다음과 같이 몇 가지 스키마의 내용이 포함될 수 있습니다 : 해당 XSD 파일이 제공 할 수있는 공간이 주어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> 

을하지만, 사용 된 네임 스페이스는 분석 전에 알 수 있습니다. 스키마가 속성에 대한 기본값을 정의한다면, 나는 또한 그것을 어떻게 든 알고 싶다.

스키마를 알고 있으면 유효성 검사없이 파일을 구문 분석 할 수 있었고 LSResourceResolver를 구현했습니다. 그러나, 나는 그것의 모두를 함께 일하게 할 수 없다. 내 (SAX) 파서를 어떻게 설정해야합니까? 지금까지 자바 XML API는 약물을 사용하고 있어야합니다 설계

답변

5

...

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)); 
}