2010-06-22 5 views
9

JAXB war großartig, eine echte Zeitersparnis, aber es ist immer noch sehr zeitaufwendig, die resultierenden Objektbäume zu durchlaufen; fast so schlecht wie direkt mit dem DOM zu arbeiten.XPath 1.0-Abfragen auf JAXB-Objekte?

Gibt es eine Möglichkeit, XPath 1.0-Abfragen auf einem JAXBElement auszuführen, ohne das Dokument jedes Mal mühsam zu einem DOM-Modell zuordnen zu müssen?

Antwort

12

Nicht direkt, nein. Sie können jedoch Apache Commons Jxpath verwenden, mit dem Sie XPath-Abfragen über beliebige Objektdiagramme ausführen können, nicht nur über JAXB-gebundene. Es kann im "nachlässigen" Modus ausgeführt werden, der Nullen toleriert.

Extrem praktisch zum Ersetzen dieser NPE-anfälligen Diagrammnavigationen.

+0

Aha, perfekt! Vielen Dank :-) –

8

Die angenommene Antwort war von 2010 und dieser Beitrag ist für andere, die XPath mit JAXB verwenden möchten. Moxy-Implementierung bietet viele schöne Erweiterungen und eine davon ist XPath auszuführen. Lesen Sie mehr dazu auf Moxy's tutorial. Beispiel von der gleichen Stelle kopiert

Customer customer = (Customer) jaxbContext.createUnmarshaller().unmarshal(instanceDoc); 
... 
int customerId = jaxbContext.getValueByXPath(customer, "@id", null, Integer.class); 
jaxbContext.setValueByXPath(customer, "first-name/text()", null, "Bob"); 
jaxbContext.setValueByXPath(customer, "phone-number/area-code/text()", null, "555"); 
... 
jaxbContext.createMarshaller().marshal(customer, System.out);