Проверка XML с несколькими XSD в Java - PullRequest
1 голос
/ 13 мая 2010

Я хочу проанализировать 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) парсер?

1 Ответ

5 голосов
/ 14 мая 2010

Кто когда-либо разрабатывал 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));
}
...