2010-06-22 9 views
9

JAXB ha sido excelente, ahorra tiempo real, pero aún lleva mucho tiempo recorrer los árboles de objetos resultantes; casi tan malo como trabajar directamente con el DOM.XPath 1.0 consultas sobre objetos JAXB?

¿Hay alguna forma de que pueda hacer consultas XPath 1.0 en un JAXBElement, sin tener que ordenar meticulosamente el documento desde y hacia un modelo DOM cada vez?

Respuesta

12

No directamente, no. Sin embargo, puede usar Apache Commons Jxpath, que le permite ejecutar consultas XPath a través de gráficos de objetos arbitrarios, no solo vinculados a JAXB. Se puede ejecutar en modo "indulgente", que es tolerante a los nulos.

Extremadamente útil para reemplazar las navegaciones con gráfico propenso a NPE.

+0

Aha, perfecto! Gracias :-) –

8

La respuesta aceptada fue de 2010 y esta publicación es para el beneficio de otros que buscan utilizar XPath con JAXB. La implementación de Moxy proporciona muchas extensiones agradables y una de ellas es ejecutar XPath. Lea más sobre esto en Moxy's tutorial. Ejemplo copiado del mismo lugar

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