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. What is the relationship between Xcode, Swift and Cocoa?

    Xcode is an IDE for developing Swift or Objective-C applications, which can use the Cocoa API (which ...

  2. 怎样退出App之前唤醒还有一个App?

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 SDK并没 ...

  3. 网络爬虫(蜘蛛)Scrapy,Python安装!

    Scrapy,Python安装.使用! 1.下载安装Python2.7.6.由于Scrapy还不支持3.x版本号. Latest Python 2 Release - Python 2.7.6,安装时 ...

  4. Eclipse-----Eclipse断点调试

  5. Share Memory By Communicating

    Share Memory By Communicating - The Go Programming Language https://golang.google.cn/doc/codewalk/sh ...

  6. 解决表单GET提交后台数据乱码问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ForeverCjl/article/details/36180933     ​在页面上提交数据到s ...

  7. 【WordSearch】Word Search

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

  8. appium(11)-java-client

    Welcome to the Appium Java client wiki! This framework is an extension of the Selenium Java client. ...

  9. webpack4 中的最新 React全家桶实战使用配置指南!

    最新React全家桶实战使用配置指南 这篇文档 是吕小明老师结合以往的项目经验 加上自己本身对react webpack redux理解写下的总结文档,总共耗时一周总结下来的,希望能对读者能够有收获, ...

  10. 【bzoj2588】Count on a tree 主席树

    这题给人开了个新思路. 原本构造一个序列的主席树,是这个位置用上个位置的信息来省空间,树上的主席树是继承父亲的信息来省空间. 此题若带修改怎么办? 若对某个点的权值做修改,则这个点的子树都会受影响,想 ...