Расширение XML с помощью XML-схемы - PullRequest
0 голосов
/ 27 марта 2012

javax.xml.validation.Validator имеет метод для проверки и дополнения XML-данных по схеме.

Упрощенный xml:

<something>
  <sub1>false</sub1> <!-- Suppose sub1 is optional and may not be present in xml -->
  <sub2>false</sub2>
</something>

Упрощенный xsd:

<complexType name="something">
  <sequence>
    <element name="sub1" type="boolean" maxOccurs="1" minOccurs="0" default="false"/>
    <element name="sub2" type="boolean" maxOccurs="1" minOccurs="1"/>
  </sequence>
</complexType>

Упрощенный код проверки и дополнения:

Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(new File(xmlFile));
DOMSource input = new DOMSource(document);
DOMResult output = new DOMResult();
validator.validate(input, output);

Document result = (Document)output.getNode();

Таким образом, помимо проверки xml по схеме, он должен также дополнить его и добавить все недостающие значения по умолчанию (например, sub1) и отправить его вoutput.

Однако sub1 отсутствует в result, когда отсутствует в XML.

Где я здесь не в курсе?

РЕДАКТИРОВАТЬ:

Хорошо, нашел причину , почему sub1 отсутствует.Но как я могу гарантировать, что sub1 присутствует в result, даже если его нет в xml?

1 Ответ

0 голосов
/ 15 августа 2012

Этот ответ цитирует спецификацию: увеличение применяет значения по умолчанию к пустым элементам. Он НЕ добавляет элементы, которых нет в xml.

Другими словами, увеличение по схеме не может гарантировать наличие элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...