Element root = document.getRootElement();  
   
List   recordenvlist = document.selectNodes("//gml:envelope");     //gml:envelope

提示 NoClassDefFoundError org.dom4j.DocumentFactory.createXPath 原因:dom4j的xpath api依赖jaxen完成解决方法:在系统中加入jaxen.jar.jaxen.jar下载路径:http://jaxen.codehaus.org/releases.htmldom4j-1.6.1.jar下载路http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.jar

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

使用dom4j的xPath解析XML

一般的XML 
国外的dom4j已经很流行了,国内的相关资料相对较少,但普及风暴也即将到来。我们公司(老外开的)解析XML就是用的dom4j。 
今天公司没事做,自己也写一个小例子贴上来,嘻~~

Xml代码  
  1. books.xml:
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <books>
  4. <!--This is a test for dom4j, jakoes, 2007.7.19-->
  5. <book show="yes" url="lucene.net">
  6. <title id="456">Lucene Studing</title>
  7. </book>
  8. <book show="yes" url="dom4j.com">
  9. <title id="123">Dom4j Tutorials</title>
  10. </book>
  11. <book show="no" url="spring.org">
  12. <title id="789">Spring in Action</title>
  13. </book>
  14. <owner>O'Reilly</owner>
  15. </books>

下面我们使用dom4j的xPath来解析:

Java代码  
  1. segment of ParseXML.java:
  2. public void parseBooks(){
  3. SAXReader reader = new SAXReader();
  4. try {
  5. Document doc = reader.read("books.xml");
  6. Node root = doc.selectSingleNode("/books");
  7. List list = root.selectNodes("book[@url='dom4j.com']");
  8. for(Object o:list){
  9. Element e = (Element) o;
  10. String show=e.attributeValue("show");
  11. System.out.println("show = " + show);
  12. }
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. }

Document doc = reader.read("books.xml");的意思是加载XML文档,此是可以用doc.asXML()来查看,它将打印整个xml文档。

Node root = doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容,对于本例也是整个xml文档。 
当然我们也可以加载/books下的某一个节点,如:book节点 
Node root = doc.selectSingleNode("/books/book"); 
或:Node root = doc.selectSingleNode("/books/*"); 
注意:如果有多个book节点,它只会读取第一个 
root.asXML()将打印: 
<book show="yes" url="lucene.net"> 
        <title id="456">Lucene Studing</title> 
</book>

既然加载了这么多,那我怎么精确的得到我想要的节点呢,别急,看下面: 
List list = root.selectNodes("book[@url='dom4j.com']"); 
它的意思就是读取books节点下的book节点,且book的节点的url属性为dom4j.com 
为什么使用list来接收呢,如果有两个book节点,且它们的url属性都为dom4j.com,此时就封闭到list里了。

如果想读取books下的所有book节点,可以这样: 
List list = root.selectNodes("book");

如果想读取books节点下的book节点下的title节点,可以这样: 
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");

注意:selectNodes()参数的格式: 
节点名[@属性名='属性值'],如:book[@url='dom4j.com'] 
如果有多个节点,用“/”分开,如:book[@url='dom4j.com']/title[@id='123']

最近就是读取封闭在List里的内容了,可以用Node来读取,也可以用Element来转换。 
attributeValue("属性")是读取该节点的属性值 
getText()是读取节点的的内容。 
                                              以上载自。。。。sorry不记得了 
要注意的是。在dom4j使用selectNodes等操作时要加上另一个包jaxen-1.1.1.jar 
带命名空间的XML 
在XML根节点出现<outputdatas xmlns="XML"> 
或<root xmlns="www.xxx.com"> xmlns等于的就是命名空间了 
因为dom4j不能识别带命名空间的节点,所以在读取带命名空间的XML时,要在每个节点前加上命名空间,方法如下例子:

Java代码  
  1. Map nsMap = null;
  2. @SuppressWarnings("unchecked")
  3. public void readXml(String xml) throws DocumentException{
  4. Document doc = DocumentHelper.parseText(xml);
  5. nsMap = new HashMap();
  6. String defaultNamespace = doc.getRootElement().getNamespaceURI();
  7. nsMap.put("default", defaultNamespace);
  8. //创建解析路径,就是在普通的解析路径前加上map里的key值
  9. XPath x = doc.createXPath("//default:outputdatas/default:results/"
  10. + "default:result[@set_id='201']"
  11. + "/default:row/default:col[@param_id='201001']");
  12. x.setNamespaceURIs(nsMap);
  13. List<Node> nodes = x.selectNodes(doc);
  14. Node node = x.selectSingleNode(doc);
  15. }

相信聪明的你。。一看就明白啦。。就不用注释啦

转自 http://lovell.iteye.com/blog/625662

带命名空间的XML的dom4j应用转相关推荐

  1. XML——c#读取带命名空间的xml

    使用C#读取xml文件有三种常用的方式: 1.xmlDocument 2.XmlTextReader 3.Linq To Xml 但是这些方式在读写有些带命名空间的xml时就不知道怎么办了(例如把xa ...

  2. 包含命名空间的xml反序列化 (1.7环境下)

    需要引用 1. <!-- 1.7环境下处理带命名空间的xml BEGIN -->         <dependency>             <groupId> ...

  3. C# 解析带前缀的Xml节点内容

    一般的xml文件相信大家都会解析了,但是遇到有命名空间的带前缀的xml,对于新手可能会有点问题.我这里在论坛解答的时候就遇到过一题,见怎么获取XML节点里面的内容,在线求教.这里给大家演示一下. 他的 ...

  4. XML 命名空间(XML Namespaces)介绍以及节点读取方法

    XML 命名空间提供避免元素命名冲突的方法. 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 文档携带着某个表格中的信息: & ...

  5. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  6. XML编程-DOM4J

    XML编程-DOM4J 基本概述 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的 ...

  7. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  8. Linq to Xml (1) 创建和查询包含命名空间的XML文档

    在项目实施中,我们常常会使用XML作为配置文件,对于普通(不包含命名空间)的XML文档,使用Linq可以很方便地进行读写操作.而对于含有命名空间的XML文档,查询时则需要指定元素所在的命名空间,才能准 ...

  9. 【XML和Dom4j、正则表达式】

    day14 [XML和Dom4j.正则表达式] 今日内容 XML 定义XML----组成成员 解析XML----Dom4j,XPath 正则表达式 第一章 XML 1.1 XML介绍 1.1 什么是X ...

最新文章

  1. X86虚拟化之三种服务器虚拟化战略架构
  2. 漫谈度量学习(Distance Metric Learning)那些事儿
  3. Python 卡方检验、克雷姆值
  4. 微服务Dubbo和SpringCloud架构设计、优劣势比较
  5. Go 语言成为最受欢迎的语言
  6. sed教程入门与实例练习(一)
  7. 升级php7_PHP 5.6 已结束安全支持,你升级到 PHP 7 系列了吗?
  8. SAP License:BW/BCS(BO)难在那里--SAP中的公司和会计凭证
  9. js vue echarts 前端绘制 cie1931 马蹄图 色度图
  10. 宝马android系统升级,宝马史上最大规模软件升级,换新OS7系统和安卓Auto,您的换了吗...
  11. 解救空间不足无法启动的白苹果iPhone5S
  12. js数组倒序排列+字符串数组转为数字数组
  13. TX-LCN分布式事务之LCN模式
  14. 嵌入式Linux学习经历 学前小结
  15. HTML语言中用什么标签来标识,为了标识一个html文件应该使用什么标签
  16. 蓝桥杯-打印菱形/字符串截断
  17. 40 sinon spy间谍函数
  18. 最实用大数据可视化分析工具
  19. 新手入坑GMSSL(一)Windows下编译GMSSL并生成CA证书
  20. 【面试】求最大最小的数

热门文章

  1. No.3 - CSS transition 和 CSS transform 配合制作动画
  2. 前端分页功能的实现以及原理
  3. Asp.Net MVC5入门学习系列⑤
  4. WebPart的使用
  5. 用js判断.net版本
  6. SpringCloud创建Config读取本地配置
  7. Java8新特性总结 -5.Stream API函数式操作流元素集合
  8. C# DataGridView 动态添加列和调整列顺序
  9. Linux初级运维(十七)——Linux内核编译与系统裁减
  10. 图解浏览器缓存,教你提高用户体验