现在,作为一个JAVAer而言,还不会读写XML的可能已经是凤毛麟角了。但是XPath并不是所有人都在用,这里俺们就简单介绍一下在解析XML的时候,使用XPath可以大大提高俺们的编程效率。俺们分别用jdom和dom4j来举例,做个非常简单的介绍。
首先看XML:
<Config>
<Child>
<ChildNode name="A">ChildA</ChildNode>
<ChildNode name="B">ChildB</ChildNode>
</Child>
</Config>
假设Config为Root,俺们要解析出每个ChildNode节点的name属性及其文本,按照常规方式,俺们可能需要写下面的代码:
Document doc = ... //得到Document.
Element root = .. // 得到根元素
Element child = .. // 得到Child节点
Element[] childNodes = .. //得到所有ChildNode
String name = ... // 得到Attribute name
String text = ... // 得到Text
看得出来,需要写好多代码。。虽然大家可能都比较熟悉了,但是还是无形中增加了出错的可能性。就算不会出错,写起来也是挺累的,特别是对于那些和俺一样不会copy/paste的人。。
如果使用XPath,就会相对简单多了,先来看看jdom怎么做:
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(....);
XPath xpath = XPath.newInstance("/Config/Child/ChildNode");
List childNodes = xpath.selectNodes(doc);
for(Object obj:childNodes) {
Element childNode = (Element)obj;
String name = childNode.getAttributeValue("name");
String text = childNode.getText();
}
主要是这里:XPath.newInstance(xpathexpression) <-这里直接使用XPath指定你需要的节点表达式就可以了,这样写的开发效率得到明显提高。
再来看看dom4j是如何实现的:
SAXReader reader = new SAXReader();
Document doc = reader.read(...);
List childNodes = doc.selectNodes("//Config/Child/ChildNode");
for(Object obj:childNodes) {
Node childNode = (Node)obj;
String name = childNode.valueOf("@name");
String text = childNode.getText();
}
doc.selectNodes("//Config/Child/ChildNode")<-直接在Document对象上selectNode 就可以得到需要的子节点列表或者单一的节点。另外,childNode.valueOf("@name")<- 可以直接获取名字为name的属性。开发效率同样很高。^^
另外,从上面可以看出来,dom4j在整合XPath方面比起jdom更加无缝,这个方面使用更加方便。
简单介绍下使用jdom/dom4j处理XML中使用XPath
最新推荐文章于 2024-07-10 06:14:25 发布