简单介绍下使用jdom/dom4j处理XML中使用XPath

现在,作为一个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更加无缝,这个方面使用更加方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值