2012-04-03 1 views
0

Ich lese eine Xml-Datei mit Jaxb, jetzt der Inhalt der XML-Datei steigt und die Datei wird zu mühsam zu pflegen, gibt es eine Möglichkeit, die Xml zu modularisieren, indem Sie es in mehrere Teile Dateien? Gibt es das in jaxb sowieso einfacher?Jaxb kombinieren xmls

+0

Kannst du bitte ein bisschen klarstellen? Ich lese, dass Sie die XML-Datei teilen möchten, aber nicht unbedingt die JAXB-Klasse. Die Poster unten scheinen deine Frage anders herum zu lesen. Vielleicht könnten Sie ein wenig umformulieren? –

+0

@ PatriceM. : Genau, möchte ich die XML-Datei teilen, ohne die JAXB-Klasse zu teilen. So etwas wie das Modifizieren von struts-config.xml – Rnet

Antwort

1

Nun, yo könnte die altbewährte (noch sehr unbeliebte) ENTITY-Methode in Ihrer XML-Datei verwenden, z.

<!DOCTYPE config [ 
    <!ENTITY subpart1 SYSTEM 'config_subpart1.xml'> 
    <!ENTITY subpart2 SYSTEM 'config_subpart2.xml'> 
]> 
<config> 
    <!-- some top-level config items in the main file 
    <item1>value</item1> 
    ... 
    <!-- then the external parts --> 
    &subpart1; 
    ... 
    &subpart2; 
    ... 
</config> 

Das XML-Dokument ist technisch identisch, und Ihr JAXB-Code sollte ohne Unterschied funktionieren.

0

Sie können eine Kombination aus STAX und JAXB verwenden. Verwenden Sie STAX, um das Element zu erreichen, das Sie lesen möchten, und ordnen Sie dann das Element mithilfe von JAXB dem Objekt zu. Auf diese Weise würden Sie nur das benötigte Element in das Objekt einlesen. Sie müssen Ihr Schema intelligent entwerfen und verwalten.

0

Ich endete mit der Implementierung meiner eigenen XmlAdapter, die meine LargeObject an spezielle LazyLargeObjectLoader anpasst. Daher speichert die XML-Hauptdatei nur einen Verweis auf die XML-Datei des großen Objekts (als Zeichenfolge), und der verzögerte Ladevorgang lädt das tatsächliche Objekt aus seiner eigenen Datei, wenn ich es anfordere.

Diese Lösung funktioniert gut in meiner Erfahrung, da es vermeidet, alles im Speicher auf einmal zu speichern.