javax.xml.validation.Validator hat eine method, um XML gegen ein Schema zu validieren und zu erweitern.XML mit XML-Schema erweitern
Simplified xml:
<something>
<sub1>false</sub1> <!-- Suppose sub1 is optional and may not be present in xml -->
<sub2>false</sub2>
</something>
Simplified 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>
Vereinfachte Validierung und Augmentation Code:
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();
also neben xml gegen das Schema validiert, sollte es auch erweitern es und fügen Sie fehlende Standardwerte (wie Sub1) hinzu und senden Sie das in output
.
sub1
ist jedoch in result
nicht vorhanden, wenn es in XML fehlt.
Wo bin ich hier weg?
EDIT:
Ok, fand die reason warum sub1
fehlt. Aber wie kann ich sicherstellen, dass sub1
in result
vorhanden ist, auch wenn es nicht in XML ist?
Wenn es optional ist und es nicht vorhanden ist, warum sollten Sie dann den Knoten hinzufügen? – ChadNC
siehe http://stackoverflow.com/questions/9884051/how-to-update-xml-file-from-another-xml-file-dynamically/9884503#9884503 –
Es sollte eine config.xml und wann immer Elemente sind In XML fehlt das erweiterte 'Dokument'. Es sollte nur die Standardwerte von xsd verwendet werden, damit sich der Code nicht mit den Standardwerten herumschlagen muss. – riha