XPath 1.0查询JAXB对象?

时间:2010-06-22 08:13:02

标签: java xpath jaxb

JAXB非常棒,真正节省时间,但遍历生成的对象树仍然非常耗时;几乎与直接使用DOM一样糟糕。

有没有办法可以在JAXBElement上执行XPath 1.0查询,而不必每次都精心地将文档编组到DOM模型中?

2 个答案:

答案 0 :(得分:13)

不直接,不。但是,您可以使用Apache Commons Jxpath,它允许您跨任意对象图运行XPath查询,而不仅仅是JAXB绑定的对象图。它可以在“宽松”模式下运行,该模式可以容忍空值。

非常便于替换那些易于发生NPE的图导航。

答案 1 :(得分:8)

接受的回答是从2010年开始的,这篇文章是为了其他希望将XPath与JAXB一起使用的人的利益。 Moxy实现提供了许多很好的扩展,其中一个是执行XPath。在Moxy's tutorial上了解详情。从同一个地方复制的示例

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