之前的工作中,一直是使用json格式的数据进行数据传输。很少会接触到xml格式的数据。不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml。不过个人感觉,还是Json比较容易些啊,第一次解析xml时,我是一脸懵逼的,不过难者不会,会者不难,知道其中的原理和使用方法,其实发现xml也是很简单而且很强大的。
简单的学习一下xml,在w3school上看看就可以了:http://www.w3school.com.cn/xml/index.asp
看一下xml和Json之间的对比和差别,这篇博客写的还是很详细的:http://www.cnblogs.com/SanMaoSpace/p/3139186.html
知乎的这个问题也不错,学习学习涨姿势:https://www.zhihu.com/question/25636060
下面就说说怎么使用SAXReader来解析xml格式的数据吧。
首先当然是要导入dom4j的jar包了。我们来造一个测试用的xml文档,好像一般入门的测试数据都是这个book.xml,我们也拿这个来简单学习一下吧。
book.xml数据如下:
<books><book><author>Thomas</author><title>Java从入门到放弃</title><publisher>UCCU</publisher></book><book><author>小白</author><title>MySQL从删库到跑路</title><publisher>Go Die</publisher></book><book><author>PHPer</author><title>Best PHP</title><publisher>PHPchurch</publisher></book>
</books>

我把book.xml放在D盘的根目录下,这样读取时能比较方便些……
下面是代码:
package com;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.List;public class SAXReaderXML {public static void main(String[] args) throws Exception {SAXReader reader = new SAXReader();File xmlfile = new File("D:/books.xml");String xml = "<books><book><author>Thomas</author><title>Java从入门到放弃</title><publisher>UCCU</publisher>" +"</book><book><author>小白</author><title>MySQL从删库到跑路</title><publisher>GoDie</publisher></book>" +"<book><author>PHPer</author><title>BestPHP</title><publisher>PHPchurch</publisher></book></books>";Document fileDocument = reader.read(xmlfile);//从xml文件获取数据Document document = reader.read(new ByteArrayInputStream(xml.getBytes("utf-8")));//读取xml字符串,注意这里要转成输入流Element root = document.getRootElement();//获取根元素List<Element> childElements = root.elements();//获取当前元素下的全部子元素for (Element child : childElements) {//循环输出全部book的相关信息List<Element> books = child.elements();for (Element book : books) {String name = book.getName();//获取当前元素名String text = book.getText();//获取当前元素值System.out.println(name + ":" + text);}}//获取第二条书籍的信息Element book2 = childElements.get(1);Element author = book2.element("author");//根据元素名获取子元素Element title = book2.element("title");Element publisher = book2.element("publisher");System.out.println("作者:" + author.getText());//获取元素值System.out.println("书名:" + title.getText());System.out.println("出版社:"+publisher.getText());}
}

代码解析:

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()方法获取元素值。

简单使用SAXReader解析xml数据相关推荐

  1. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. 解析xml数据存入bean映射到数据库的 需求解决过程

    解析xml数据存入bean映射到数据库的 需求解决过程 2017年12月19日 15:18:57 守望dfdfdf 阅读数:419 标签: xmlbean 更多 个人分类: 工作 问题 编辑 版权声明 ...

  3. 【Java中级篇】Dom4j解析xml数据

    一.依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId> ...

  4. php jquery ajax xml,jquery Ajax解析XML数据代码实例

    jquery Ajax解析XML数据(同步及异步调用)简单实例 $.ajax({ async: true, // 默认true(异步请求) cache: true, // 默认true,设置为 fal ...

  5. TinyXML-2解析XML数据

    声明 本文例子源自在C++中使用TinyXML2解析xml一文,其余部分来源于网络搜集,难免疏漏,敬请随意吐槽. XML以及JSON 什么是XML 根据Wikipedia-XML的说法: 可扩展标记语 ...

  6. Java解析XML数据(三)——强大的XOM之simple-xml解析

    前面已经了解了DOM和SAX两种解析方式,通过对比知道了DOM解析的核心是建立树模型,而SAX解析的核心是通过回调机制来实现.本篇文章将继续带大家用一种更为强大更为简单的工具来解析XML数据.我这里给 ...

  7. JAVA-使用SAX解析XML数据

    一.SAX (Simple API for XML) SAX解析XML文件采用的是事件驱动,它不需要解析完整个文档,而是一边按内容顺序解析文档,一般判断当前读到的字符是否符合XML语法中的某部分,如果 ...

  8. [iOS] dom解析xml数据,拿到lt;gt;里面的值

    [iOS] dom解析xml数据,拿到<>里面的值 <response result="success" timestamp="1338890206&q ...

  9. 简单使用JDOM解析XML

    简单使用JDOM解析XML 博客分类: xml XMLJava编程ASPVB 使用JDOM解析XML 一.前言     JDOM是Breet Mclaughlin和Jason Hunter两大Java ...

最新文章

  1. 2022-2028年中国铁路行业投资分析及前景预测报告(全卷)
  2. 盘点 HashMap 源码中的那些优雅的设计!
  3. c语言如果读不到数据就跳过,4,VS常见问题解决(一闪而过、等问题)不断更新...
  4. struts2 redirect 获取参数null_社会化登录支持授权域以便于获取更大权限
  5. 修改图层的symbol(AE+C#)
  6. 【Oracle】ORA-30042: Cannot offline the undo tablespace
  7. python的chr可以转换中文吗,chr()在python中怎么实现编码的转换
  8. Tensor基本操作
  9. 《Spring Boot极简教程》 第6章 Springboot数据库集成
  10. Python 语言简介与入门(1)
  11. JavaScript之innerHTML和outerHTML,innerText和outerText
  12. 架构实战体会,结合《蔡学镛:架构的5个观察角度》
  13. java编写数独_简单实现java数独游戏
  14. WindowsLive™ OneCare™初体验
  15. uniapp 多国语言实现
  16. 编程猫python课程结束后哪里再学更高级别的_@正在选编程猫的家长,先别急,看完这篇测评再报也不迟!...
  17. [go]深入学习Go总结
  18. 很酷的智能家居/工业路由器两用的物联网WiFi模块 MQTT/TCP协议 MIPS+LINUX+Openwrt技术覆盖
  19. 字节、字、位、比特,这四者之间的关系
  20. kiwix 离线维基百科_离线内容提供商Kiwix背后的故事

热门文章

  1. 分布式网络爬虫框架Cola介绍
  2. Lawnmower(洛谷 CF115B)
  3. Vlan间通信原理(HCIA)
  4. es 启动elasticsearch.bat发生闪退
  5. windows 安装pyenv做python环境控制(极其简单)
  6. (python)生产者消费者模型
  7. padStart()和padEnd()使用
  8. Kafka能作为数据库使用吗
  9. 如何给字符串数组赋值
  10. fail-fast 机制是什么?(详解)