sax解析xml文件的优点_浏览器解析xml数据错误

sax解析xml文件的优点_浏览器解析xml数据错误之前的工作中,一直是使用json格式的数据进行数据传输。很少会接触到xml格式的数据。不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml。不过个人感觉,还是Json比较容易些啊,第一次解析xml时,我是一脸懵逼的,不过难者不会,会者不难,知道其中的原理和使用方法,其实发现xml也是很简单而且很强大的。简单的学习一下xml,在w3sch
之前的工作中,一直是使用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盘的根目录下,这样读取时能比较方便些……
下面是代码:
此代码由Java架构师必看网-架构君整理
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()方法获取元素值。
架构君码字不易,如需转载,请注明出处:https://javajgs.com/archives/209916
0

发表评论