使用SAXReader解析xml数据
之前的工作中,一直是使用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数据如下:
我把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 = “Thomas
“小白
“PHPer
Document fileDocument = reader.read(xmlfile);//从xml文件获取数据
Document document = reader.read(new ByteArrayInputStream(xml.getBytes(“utf-8”)));//读取xml字符串,注意这里要转成输入流
Element root = document.getRootElement();//获取根元素
List 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());
}