book.xml数据如下:
  1. <books>
  2. <book>
  3. <author>Thomas</author>
  4. <title>Java从入门到放弃</title>
  5. <publisher>UCCU</publisher>
  6. </book>
  7. <book>
  8. <author>小白</author>
  9. <title>MySQL从删库到跑路</title>
  10. <publisher>Go Die</publisher>
  11. </book>
  12. <book>
  13. <author>PHPer</author>
  14. <title>Best PHP</title>
  15. <publisher>PHPchurch</publisher>
  16. </book>
  17. </books>
我把book.xml放在D盘的根目录下,这样读取时能比较方便些……
下面是代码:
  1. package com;
  2. import org.dom4j.Document;
  3. import org.dom4j.Element;
  4. import org.dom4j.io.SAXReader;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.File;
  7. import java.util.List;
  8. public class SAXReaderXML {
  9. public static void main(String[] args) throws Exception {
  10. SAXReader reader = new SAXReader();
  11. File xmlfile = new File("D:/books.xml");
  12. String xml = "<books><book><author>Thomas</author><title>Java从入门到放弃</title><publisher>UCCU</publisher>" +
  13. "</book><book><author>小白</author><title>MySQL从删库到跑路</title><publisher>GoDie</publisher></book>" +
  14. "<book><author>PHPer</author><title>BestPHP</title><publisher>PHPchurch</publisher></book></books>";
  15. Document fileDocument = reader.read(xmlfile);//从xml文件获取数据
  16. Document document = reader.read(new ByteArrayInputStream(xml.getBytes("utf-8")));//读取xml字符串,注意这里要转成输入流
  17. Element root = document.getRootElement();//获取根元素
  18. List<Element> childElements = root.elements();//获取当前元素下的全部子元素
  19. for (Element child : childElements) {//循环输出全部book的相关信息
  20. List<Element> books = child.elements();
  21. for (Element book : books) {
  22. String name = book.getName();//获取当前元素名
  23. String text = book.getText();//获取当前元素值
  24. System.out.println(name + ":" + text);
  25. }
  26. }
  27. //获取第二条书籍的信息
  28. Element book2 = childElements.get(1);
  29. Element author = book2.element("author");//根据元素名获取子元素
  30. Element title = book2.element("title");
  31. Element publisher = book2.element("publisher");
  32. System.out.println("作者:" + author.getText());//获取元素值
  33. System.out.println("书名:" + title.getText());
  34. System.out.println("出版社:"+publisher.getText());
  35. }
  36. }
代码解析:
1、读取xml数据
SAXReader可以通过多种方式读取xml数据,并返回Document格式的对象。通过查看源码,可以看出read()方法接收File,InputStream和URL等格式的参数来读取相应的xml数据。在代码里我演示了读取xml文档和xml格式的字符串两种方式。当然,字符串要根据相应的编码转成输入流才能被SAXReader读取。
2、解析xml数据
读取到Document对象后,我们使用getRootElement()方法获取根元素,返回的是一个Element对象。在本例中,该元素的name即为books。
3、获取子元素数据
获取根元素后,便可以一层一层的去获取他的子元素信息。如果知道子元素的标签名称,便可以直接调用element("name")方法获取该子元素。如果不知道子元素的名称,或者想直接获取该元素下的全部子元素,可以调用elements()方法获取一个包括全部元素的list,然后进行下一步的处理。
4、输出元素信息
调用getName()方法获取当前元素的元素名,attributeValue()获取属性名。如果当前元素没有子元素,则调用getText()方法获取元素值。

dom4j的解析实例的更多相关文章

  1. [工作代码]dom4j解析实例

    工作中,我需要和另一个公司(A公司)共同开发一个模块,我写一个servlet接口,A公司携带xml格式的报文来访问.我采用流的形式读取,在处理后以流的形式写入,在返回(相应)给A公司. demo: p ...

  2. JSON解析实例——使用Json-lib

    JSON解析实例——使用Json-lib Json-lib下载及使用 本文介绍用一个类库进行JSON解析. 工具下载地址:http://sourceforge.net/projects/json-li ...

  3. $使用dom4j可解析 返回&#x等字样的 html转义字符

    如果以GET或POST请求某个系统返回,带有 $#x 那很有可能是axis服务器返回的. <?xml version="1.0" encoding="UTF-8&q ...

  4. $使用dom4j可解析 返回&#x等字样的 html转义字符【转】

    如果以GET或POST请求某个系统返回,带有 $#x 那很有可能是axis服务器返回的. <?xml version="1.0" encoding="UTF-8&q ...

  5. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念

    JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念 <html> <body> <script type="t ...

  6. pcapng文件的python解析实例以及抓包补遗

    为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生.关于它的介绍详见<PCAP Next Generation Dump File Format> 当前的w ...

  7. JDOM,dom4j方式解析XML

    <?xml version="1.0" encoding="UTF-8"?> <dataSources> <!-- 定义MySQL ...

  8. 如何使用DOM4j+xpath 解析

    1.首先去dom4j官网下载一个对应版本的JAR包 XML的配置文件 导入一个config.xml文件 下面是dom4j+xpath解析XML文件

  9. dom4j递归解析XML字符串所有子节点

    /** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...

随机推荐

  1. 修改mysql数据库 密码

    将密码改成123456 update mysql.user set authentication_string=password('123456') where user='root' and Hos ...

  2. JS 常用字符串操作

    Js字符串操作函数大全 /*******************************************                        字符串函数扩充              ...

  3. Angularv4入门篇1

    国庆时按照官网的tutorial写了遍官方示例,一知半解,不明白angular的服务的服务为何要单独抽离出来.angular应用是如何启用的.近期打算看下angular的文档部分,然后梳理遍以理解an ...

  4. hdu 1413 文件系统

    hdu   1413   文件系统         题目链接:pid=1413" target="_blank">http://acm.hdu.edu.cn/sho ...

  5. 设置Activity进入退出动画

    http://blog.csdn.net/tenpage/article/details/7792689 http://blog.csdn.net/lnb333666/article/details/ ...

  6. 【原创】Sublime Text 3快捷配置c++的编译,运行,gdb环境

    打开Tools ->Build System -> New Build System 弹出一个文件,将原有的东西删掉,输入: { "encoding": "u ...

  7. EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能

    本文转自EasyDarwin开源团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52951311 EasyRTMP EasyRTMP ...

  8. linux系统上安装svn服务器 环境linux+nginx+svnserver

    系统:Ubuntu 12.04 64位 lnmp环境 集成软件:PHP5.4.27.Nginx1.6.0.MySQL5.5.37 阿里云server svnserver有2种执行方式:独立server ...

  9. cURL范例(包括错误输出和详情输出)

    //1.初始化 $ch = curl_init(); //2.设置选项,包括URL curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com'); cur ...

  10. CentOS中文乱码之解决办法

    在学习Linux的过程中,最先碰到的是通过SSH终端连接时发现有乱码出现,使用这篇文章先从这里说起. 在 ssh , telnet 终端中文显示乱码解决办法#vim /etc/sysconfig/i1 ...