G
Guest
Gast
Hallo
Ich habe beim Einlesen einer Datei mittels EMF, welche wir zuvor auch über EMF rausgeschrieben haben, dass einige Elemente nach dem Einlesen nicht mehr vorhanden sind. Dabei nutzen wir zur Generierung unserer Modellklassen eine xsd mit folgender Struktur (Ausschnitt):
Beim Serialisieren dieser Struktur läuft alles nach Plan, d.h. die angelegten Elemente werden alle mit rausgeschrieben, beim Einlesen fallen jedoch alle Elemente, welche in der oben mit *** hervorgehobenen markierten Zeile definiert sind, raus.
Wir laden unsere Ressourcen mit folgendem Aufruf:
Das Speichern erfolgt durch:
Das tatsächliche XML, welches wir lesen wollen, sieht so aus:
Das nach dem Einlesen fehlende Element ist wieder hervorgehoben. Wir verwenden EMF-Version 2.2.2. Wir vermuten, dass wir entweder die Lese- oder Schreiboptionen konfigurieren müssen, aber kommen an der Stelle nicht weiter. Google hat leider nicht helfen können, und auch die Boardsuche hat keine Ergebnisse gebracht. Schon mal vielen Dank im Voraus für eure Mühe...
Ich habe beim Einlesen einer Datei mittels EMF, welche wir zuvor auch über EMF rausgeschrieben haben, dass einige Elemente nach dem Einlesen nicht mehr vorhanden sind. Dabei nutzen wir zur Generierung unserer Modellklassen eine xsd mit folgender Struktur (Ausschnitt):
Code:
<xs:element name="Exp">
<xs:complexType>
<xs:sequence>
<xs:choice>
***<xs:element name="Value" type="RuleValue"/>***
<xs:element ref="Exp"/>
</xs:choice>
<xs:element name="Operator" type="Operator"/>
<xs:choice minOccurs="0">
<xs:element name="Value" type="RuleValue"/>
<xs:element ref="Exp"/>
</xs:choice>
<xs:element name="DateRange" type="DateRange" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
Beim Serialisieren dieser Struktur läuft alles nach Plan, d.h. die angelegten Elemente werden alle mit rausgeschrieben, beim Einlesen fallen jedoch alle Elemente, welche in der oben mit *** hervorgehobenen markierten Zeile definiert sind, raus.
Wir laden unsere Ressourcen mit folgendem Aufruf:
Code:
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
.put(Resource.Factory.Registry.DEFAULT_EXTENSION,
new XXXResourceFactoryImpl());
resourceSet.getPackageRegistry().put(XXXPackage.eNS_URI,
XXXPackage.eINSTANCE);
URI uri = URI.createURI(fileName);
Resource resource = null;
try {
resource = resourceSet.getResource(uri, true);
}catch (WrappedException we) {
//unwichtig
}
Das Speichern erfolgt durch:
Code:
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
.put(Resource.Factory.Registry.DEFAULT_EXTENSION,
new XXXResourceFactoryImpl());
resourceSet.getPackageRegistry().put(XXXPackage.eNS_URI,
XXXPackage.eINSTANCE);
Resource resource = resourceSet.createResource(URI
.createFileURI(PATH));
resource.getContents().add(documentRoot); // documentRoot = wurzelknoten des Baumes
Map options = new HashMap();
options.put(XMLResource.OPTION_SKIP_ESCAPE, Boolean.TRUE);
resource.save(new FileOutputStream(new File(fileName)), options);
Das tatsächliche XML, welches wir lesen wollen, sieht so aus:
Code:
<Exp name="expName">
***<Value dataType="para"><![CDATA["paraName"]]></Value>***
<Operator><![CDATA[CONTAINS]]></Operator>
<Value dataType="list"><ValueList>
<Value dataType="string"><![CDATA[moeglich]]></Value>
</ValueList></Value>
</Exp>
Das nach dem Einlesen fehlende Element ist wieder hervorgehoben. Wir verwenden EMF-Version 2.2.2. Wir vermuten, dass wir entweder die Lese- oder Schreiboptionen konfigurieren müssen, aber kommen an der Stelle nicht weiter. Google hat leider nicht helfen können, und auch die Boardsuche hat keine Ergebnisse gebracht. Schon mal vielen Dank im Voraus für eure Mühe...