2010-05-13 4 views
1

Я хочу проанализировать XML-файл с Java и проверить его на том же шаге против схемы XSD. Файл XML может содержать в себе несколько схем, как это:Проверка XML с несколькими XSD в Java

<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

Кто когда-либо проектировал XML API Java должны были наркотики ...

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)); 
} 
Смежные вопросы