JAXB Marshalling: Filterwerte von Blattelementen

8

Ich habe ein ziemlich komplexes JAXB-Tree-Objekt. Für jeden Blattknoten muss ich seinen tatsächlichen Wert filtern

z. B.

%Vor%

Die Blattknoten hier wären Title , author und Date .
Stellen Sie sich vor, ich brauche ein Marshalled-Dokument für dieses JAXB-Modell, wobei das erste Zeichen für jeden Blattknoten entfernt wird :

%Vor%


Was ist der beste Ansatz?
Ich sehe zwei Startpunkte, aber ich bin derzeit stecken.

1. Führen Sie die Änderung im JAXB-Modell durch
Gibt es einen Traversal-Mechanismus, mit dem ich die Blattelemente eines beliebigen JAXB-Objekts (irgendeine Art von Besuchermuster oder etwas) erhalten kann?

2. In das Marshalling einsteigen
Vielleicht können wir beim Marshalling einspringen, z. mit einem XMLStreamWriter ..

Gibt es eine elegante Lösung für diese Art von Problem?

    
MRalwasser 17.02.2017, 15:02
quelle

2 Antworten

9

Ein anderer Ansatz, der auf einem Decorator vom Typ XMLStreamWriter basiert, der einfach das erste Zeichen eines Textinhalts überspringt, Sie jedoch nicht nur auf Blattknoten beschränken können, wird dies tun wenden Sie die gleiche Logik auf alle Textinhalte nicht nur der Blattknoten an, was kein Problem darstellt, wenn Ihr Marshalling keine gemischten Inhalte erzeugt, wie in Ihrem Beispiel. Wenn Sie keinen gemischten Inhalt haben (Textinhalt und Knoten zusammen), können nur Blattknoten einen Textinhalt haben.

Ihr Dekorateur könnte etwa so aussehen:

%Vor%

Dann wäre Ihr Code:

%Vor%     
Nicolas Filotto 21.02.2017, 12:18
quelle
6

Sie könnten das resultierende XML nachbearbeiten , um das erste Zeichen des Textinhalts der einzelnen Blattknoten zu entfernen, indem Sie XSLT mit dem nächsten Stylesheet verwenden:

%Vor%

Je nach der Größe des resultierenden XML können Sie entweder das Ergebnis im Speicher behalten, bevor Sie das Stylesheet anwenden oder zuerst die resultierende XML in eine temporäre Datei speichern.

So könnte Ihr Code davon ausgehen, dass der resultierende XML in den Speicher passen kann:

%Vor%

Ausgabe:

%Vor%     
Nicolas Filotto 21.02.2017 11:40
quelle

Tags und Links