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?