XPath 1.0 запрашивает объекты JAXB? - PullRequest
9 голосов
/ 22 июня 2010

JAXB был великолепен, реально сэкономил время, но все еще очень долго тратил деревья объектов;почти так же плохо, как работать напрямую с DOM.

Есть ли способ, с помощью которого я могу выполнять запросы XPath 1.0 на элементе JAXBElement, без необходимости каждый раз тщательно маршировать документ в модель DOM и из нее?

Ответы [ 2 ]

13 голосов
/ 22 июня 2010

Не напрямую, нет.Однако вы можете использовать Apache Commons Jxpath , который позволяет запускать запросы XPath для произвольных графов объектов, а не только для JAXB-связанных.Он может быть запущен в «мягком» режиме, который не допускает нулевых значений.

Чрезвычайно удобно для замены навигационных графиков, склонных к NPE.

8 голосов
/ 11 августа 2012

Принятый ответ был с 2010 года, и этот пост предназначен для тех, кто хочет использовать XPath с JAXB. Реализация Moxy предоставляет множество приятных расширений, и одним из них является выполнение XPath. Подробнее об этом читайте в учебном пособии по Moxy . Пример скопирован с того же места

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...