2012-03-27 11 views
0

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?

+0

Wenn es optional ist und es nicht vorhanden ist, warum sollten Sie dann den Knoten hinzufügen? – ChadNC

+0

siehe http://stackoverflow.com/questions/9884051/how-to-update-xml-file-from-another-xml-file-dynamically/9884503#9884503 –

+0

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

Antwort

0

Diese answer zitiert die Spezifikation: Augmentation wendet Standardwerte auf leere Elemente an. Es fügt KEINE Elemente hinzu, die nicht in XML vorhanden sind.

Mit anderen Worten, Erweiterung durch Schema kann nicht garantieren, dass Elemente vorhanden sind.

Verwandte Themen