XML是一个展示良好的报文格式,在SOA架构中广泛应用,并且在Dom操作中性能优异,但也不适合大报文的频繁转换。我们在做细化操作的时候,查找指定报文往往是我们需要大量操作。所以我们今天针对DOM4J中的查询进一步整理。DOM4j中有4中元素,分别是Node,Document,Element,Attribute以上四类元素,我们现在来分别介绍这4中元素,整个报文是一个Document,Document中的每个节点是一个Element,而Element中定义的属性是Attribute,其中Node是一个特殊的节点,他可以代表以上三种的任何一种。那么大家可能迷惑为什么有其他三种节点已经可以表示一个完整的报文了,为什么还需要Node节点呢?因为我们在实际工作中,路径的写法是非常的灵活的,可能是“/”表示Document,或是/aa/bb的Element,或是/aa/bb/@code的Attribute。为了适配统一的方法,所以我们使用Node。现在大家可以明白了Node的作用是什么了吧。接下来我们上一段代码,代码作用是判断给定的路径是不是合法路径,不是合法就是固定值。
@SuppressWarnings("unchecked")
public String getPathorFixValue(String text, String xml) {
String result = "";
try {
Document doc = DocumentHelper.parseText(xml);
XPath xpath = this.getXPath(doc, text);
if (xpath == null) {
result = text;
} else {
List<Node> lis = xpath.selectNodes(doc);
if (lis.get(0) instanceof Element) {
result = lis.get(0).asXML();
} else if (lis.get(0) instanceof Attribute) {
result = lis.get(0).getText();
} else if (lis.get(0) instanceof Document) {
result = lis.get(0).asXML();
}
}
} catch (DocumentException e) {
logger.info("报文[" + xml + "]不合法,请检查报文后重试!");
}
return result;
}