简单使用SAXReader解析xml数据和outputformat 输出格式化xml

前端之家收集整理的这篇文章主要介绍了简单使用SAXReader解析xml数据和outputformat 输出格式化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>GoDie</publisher>
</book>
<book>
<author>PHPer</author>
<title>BestPHP</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()方法获取元素值

xml格式化

代码:

package com.ddatsh;
 
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
 
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
public class XmlFormat {
 
    public static String format(String str) throws Exception {
        SAXReader reader = new SAXReader();
        // System.out.println(reader);
        // 注释:创建一个串的字符输入流
        StringReader in = new StringReader(str);
        Document doc = reader.read(in);
        // System.out.println(doc.getRootElement());
        // 注释:使用OutputFormat创建格式化输出
        OutputFormat formater = OutputFormat.createPrettyPrint();
        //formater=OutputFormat.createCompactFormat();
        // 注释:设置xml的输出编码
        formater.setEncoding("utf-8");
        // 注释:创建输出(目标)
        StringWriter out = new StringWriter();
        // 注释:创建输出流
        XMLWriter writer = new XMLWriter(out,formater);
        // 注释:输出格式化的串到目标中,执行后。格式化后的串保存在out中。
        writer.write(doc);
 
        writer.close();
        System.out.println(out.toString());
        // 注释:返回我们格式化后的结果
        return out.toString();
    }
 
    public static void main(String[] args) throws Exception {
        String head="<?xml version=\"1.0\" encoding=\"GBK\"?>";
        String str = "<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>";
        // System.out.println(str);
        format(str);
    }
}

猜你在找的XML相关文章