我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<CreateReservation>
<NewReservation>
<Profile op="D">
<ProfileID>ID</ProfileID>
<ProfileType>TYPE</ProfileType>
</Profile>
<Number>123456</Number>
</NewReservation>
CreateReservation
通过以下方式从类中使用 JAXB 编组:
CreateReservation request = new CreateReservation("123456", "D");
String xpathExpr = "boolean(//*[local-name()='CreateReservationRQ']//@op='D')"
JAXBContext context = JAXBContext.newInstance(CreateReservation.class);
marshaller = context.createMarshaller();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
marshaller.marshal(request, document); //line creates xml presented above
//EVALUATION
XPath xPath = XPathFactory.newInstance().newXPath();
xPath.evaluate(xpathExpr, document, XPathConstants.BOOLEAN); //line evaluates xpath and returns true
总结所有内容,呈现代码编组CreateReservation
类,从中创建相应的 XML,并使用 xpath 表达式检查创建的 xml 是否具有任何<CreateReservation>
节点,该节点具有任何具有op="D"
属性的子节点。使用以下 xpath 表达式完成检查:
boolean(//*[local-name()='CreateReservationRQ']//@op='D')
条件工作正常,提供代码示例。现在我想摆脱不必要的CreateReservation
班级编组。为此,我想从 JAXB 切换到 JXPath:
PathContext jXPathContext = JXPathContext.newContext(obj);
Object obj = jXPathContext.getValue(CONDITION);
if (obj != null) {
//code should behave exactly the same, as my previous model
}
obj
-CreateReservation
类的成员(它的结构与上面的 xml 中呈现的完全相同)
CONDITION
- 我的 JXPath 查询
这个想法是,那行:
Object obj = jXPathContext.getValue(CONDITION);
CreateREservation
当类的op
字段等于“D”时,返回任何节点。如果不存在节点,则返回 null。功能代码的行为应该与以前完全相同。你能告诉我我CONDITION
应该是什么样子吗?