热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

带命名空间的XML的dom4j应用转

Elementrootdocument.getRootElement();Listrecordenvlistdocument.selectNodes(gml:envelope)

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.       
  5.     <book show&#61;"yes" url&#61;"lucene.net">  
  6.         <title id&#61;"456">Lucene Studingtitle>  
  7.     book>  
  8.     <book show&#61;"yes" url&#61;"dom4j.com">  
  9.         <title id&#61;"123">Dom4j Tutorialstitle>  
  10.     book>  
  11.     <book show&#61;"no" url&#61;"spring.org">  
  12.         <title id&#61;"789">Spring in Actiontitle>  
  13.     book>  
  14.     <owner>O&#39;Reillyowner>  
  15. books>  



下面我们使用dom4j的xPath来解析&#xff1a; 

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



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

Node root &#61; doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容&#xff0c;对于本例也是整个xml文档。 
当然我们也可以加载/books下的某一个节点&#xff0c;如&#xff1a;book节点 
Node root &#61; doc.selectSingleNode("/books/book"); 
或&#xff1a;Node root &#61; doc.selectSingleNode("/books/*"); 
注意&#xff1a;如果有多个book节点&#xff0c;它只会读取第一个 
root.asXML()将打印&#xff1a; 
 
         
 

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

如果想读取books下的所有book节点&#xff0c;可以这样&#xff1a; 
List list &#61; root.selectNodes("book"); 

如果想读取books节点下的book节点下的title节点&#xff0c;可以这样&#xff1a; 
List list2 &#61; root.selectNodes("book[&#64;url&#61;&#39;dom4j.com&#39;]/title[&#64;id&#61;&#39;123&#39;]"); 

注意&#xff1a;selectNodes()参数的格式&#xff1a; 
节点名[&#64;属性名&#61;&#39;属性值&#39;]&#xff0c;如&#xff1a;book[&#64;url&#61;&#39;dom4j.com&#39;] 
如果有多个节点&#xff0c;用“/”分开&#xff0c;如&#xff1a;book[&#64;url&#61;&#39;dom4j.com&#39;]/title[&#64;id&#61;&#39;123&#39;] 

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

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


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

 

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



推荐阅读
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 在工作中,遇到需要将excel表中的特定数据提取出来,并将数据以键值对的形式存储到map集合中。因为我用的是maven管理的jar包,所 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
  • 开发笔记:MyBatis学习之逆向工程
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MyBatis学习之逆向工程相关的知识,希望对你有一定的参考价值。转载:http://w ... [详细]
author-avatar
天辰Tcqq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有