2010-06-22 10 views
9

JAXB był świetny, realistyczny, ale wciąż bardzo czasochłonny jest przechodzenie przez wynikowe drzewa obiektów; prawie tak źle, jak praca bezpośrednio z DOMem.XPath 1.0 zapytania na obiektach JAXB?

Czy istnieje sposób, który można wykonać kwerend XPath 1.0 na JAXBElement, bez konieczności pieczołowicie marszałek dokumentu do iz DOM modelu za każdym razem?

Odpowiedz

12

Nie bezpośrednio, nie. Można jednak użyć opcji Apache Commons Jxpath, która umożliwia uruchamianie zapytań XPath na dowolnych wykresach obiektów, a nie tylko tych związanych z JAXB. Można go uruchomić w trybie "łagodnym", który jest tolerancyjny dla wartości zerowych.

Niezwykle przydatny do zastąpienia tych NPE-podatne nawigacje wykresie.

+0

Aha, idealnie! Dzięki :-) –

8

Przyjęty odpowiedź była od 2010 roku i ten post jest dla dobra innych, którzy chcą używać XPath z JAXB. Implementacja Moxy zapewnia mnóstwo ładnych rozszerzeń, a jednym z nich jest wykonanie XPath. Przeczytaj więcej na ten temat na Moxy's tutorial. Przykład skopiowany z tego samego miejsca:

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);