Java对XML文件的读取


笔记: Java的XML写入

一、DOM生成XML

1.DomTest2.java

package personal.caojx;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;

/**

  • @ClassName: DomTest2

  • @Description: Dom生成XML

  • @version: v1.0.0

  • @author: caojx

  • @date: 2017/9/05 13:07
    */
    public class DomTest2 {

    public static void main(String[] args){
    //1.创建一个DocumentBuilderFactory对象
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    //2.创建一个DocumentBuilder对象
    try {
    DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
    //3.创建一个document对象
    Document document = documentBuilder.newDocument();
    document.setXmlStandalone(true);//不包含dtd
    //4.创建根节点
    Element bookstore = document.createElement(“bookstore”);
    //5.向bookstore根节点中添加子节点
    Element book = document.createElement(“book”);

     	Element name <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     	name<span class="token punctuation">.</span><span class="token function">setTextContent</span><span class="token punctuation">(</span><span class="token string">"张三"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     	bookstore<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>book<span class="token punctuation">)</span><span class="token punctuation">;</span>
     	<span class="token comment">//6.向book中添加属性</span>
     	book<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">,</span><span class="token string">"1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    
     	<span class="token comment">//7.向book中添加子节点</span>
     	book<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span>
    
     	<span class="token comment">//将根节点添加到dom中</span>
     	document<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>bookstore<span class="token punctuation">)</span><span class="token punctuation">;</span>
    
     	<span class="token comment">//通过transformerFactory将dom树写入到xml中</span>
     	<span class="token comment">//创建TransformerFactory</span>
     	TransformerFactory transformerFactory <span class="token operator">=</span> TransformerFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    
     	<span class="token comment">//创建Transformer</span>
     	Transformer transformer <span class="token operator">=</span> transformerFactory<span class="token punctuation">.</span><span class="token function">newTransformer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     	<span class="token comment">//是否换行</span>
     	transformer<span class="token punctuation">.</span><span class="token function">setOutputProperty</span><span class="token punctuation">(</span>OutputKeys<span class="token punctuation">.</span>INDENT<span class="token punctuation">,</span><span class="token string">"yes"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     	<span class="token comment">//缩进4个空格</span>
     	transformer<span class="token punctuation">.</span><span class="token function">setOutputProperty</span><span class="token punctuation">(</span><span class="token string">"{http://xml.apache.org/xslt}indent-amount"</span><span class="token punctuation">,</span> <span class="token string">"4"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     	<span class="token comment">//将dom树写入到xml中</span>
     	transformer<span class="token punctuation">.</span><span class="token function">transform</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">DOMSource</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token keyword">new</span> <span class="token class-name">StreamResult</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"dom.xml"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">ParserConfigurationException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
     	e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">TransformerConfigurationException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
     	e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">TransformerException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
     	e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span>
    

    }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

生成结果:

<?xml version="1.0" encoding="UTF-8"?><bookstore>
    <book id="1">
        <name>张三</name>
    </book>
</bookstore>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、SAX生成XML

1.SAXTest2.java

package personal.caojx;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import sun.jvm.hotspot.oops.OopUtilities;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;

/**

  • @ClassName: SAXTest2

  • @Description: SAX生成XML

  • @version: v1.0.0

  • @author: caojx

  • @date: 2017/8/25 13:07
    */
    public class SAXTest2 {

    public static void main(String[] args){
    //1.创建SAXTransformerFactory
    SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
    try {
    //2.通过SAXTransformerFactory对象创建一个transformerHandler
    TransformerHandler transformerHandler = saxTransformerFactory.newTransformerHandler();
    //3.通过transformerHandler对象创建一个transformer
    Transformer transformer = transformerHandler.getTransformer();
    //4.通过Transformer对生成的xml格式进行设置
    transformer.setOutputProperty(OutputKeys.INDENT,“yes”);
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", “4”);
    //5.创建一个Result
    File file = new File(“sax.xml”);
    //6.创建result对象,并且使其与handler关联
    Result result = new StreamResult(file);
    transformerHandler.setResult(result);

         <span class="token comment">//7.利用handler对xml的文件内容进行编写</span>
         <span class="token comment">//打开document</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">startDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         <span class="token comment">//创建bookstore节点</span>
         AttributesImpl attributes <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AttributesImpl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">startElement</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span> <span class="token string">"bookstore"</span><span class="token punctuation">,</span> attributes<span class="token punctuation">)</span><span class="token punctuation">;</span>
         <span class="token comment">//添加book节点和属性</span>
         attributes<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         attributes<span class="token punctuation">.</span><span class="token function">addAttribute</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"id"</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">startElement</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"book"</span><span class="token punctuation">,</span>attributes<span class="token punctuation">)</span><span class="token punctuation">;</span>
         <span class="token comment">//添加name节点和文本</span>
         attributes<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">startElement</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"name"</span><span class="token punctuation">,</span>attributes<span class="token punctuation">)</span><span class="token punctuation">;</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">characters</span><span class="token punctuation">(</span><span class="token string">"张三"</span><span class="token punctuation">.</span><span class="token function">toCharArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token string">"张三"</span><span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">endElement</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    
         transformerHandler<span class="token punctuation">.</span><span class="token function">endElement</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"book"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    
         transformerHandler<span class="token punctuation">.</span><span class="token function">endElement</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"bookstore"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         transformerHandler<span class="token punctuation">.</span><span class="token function">endDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">TransformerConfigurationException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
         e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">SAXException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
         e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
     <span class="token punctuation">}</span>
    

    }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

生成结果:

<?xml version="1.0" encoding="UTF-8"?><bookstore>
    <book id="1">
        <name>张三</name>
    </book>
</bookstore>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

三、JDOM生成XML

1.JDomTest2.java

package personal.caojx;

import org.jdom2.*;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.EscapeStrategy;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**

  • ProjectName: xml-java

  • ClassName: JDomTest.java

  • @Description: JDOM生成XML

  • @version: v1.0.0

  • @author: caojx

  • @date: 2017/9/24 下午9:12

  • @since JDK 1.8
    */
    public class JDomTest2 {

    public static void main(String[] args){
    //1.生成一个根节点
    Element rss = new Element(“rss”);
    rss.setAttribute(“version”,“2.0”);
    //2.生成document
    Document document = new Document(rss);
    Element channel = new Element(“channel”);
    rss.addContent(channel);
    Element title = new Element(“title”);
    title.setText("<![CDATA[国内最新新闻]]>");
    channel.addContent(title);

    Format format <span class="token operator">=</span> Format<span class="token punctuation">.</span><span class="token function">getPrettyFormat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    format<span class="token punctuation">.</span><span class="token function">setEscapeStrategy</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">EscapeStrategy</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">shouldEscape</span><span class="token punctuation">(</span><span class="token keyword">char</span> c<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//3.创建XMLOutputter</span>
    XMLOutputter outputter <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLOutputter</span><span class="token punctuation">(</span>format<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//4.利用outputter将document对象转换成xml</span>
    <span class="token keyword">try</span> <span class="token punctuation">{</span>
        outputter<span class="token punctuation">.</span><span class="token function">output</span><span class="token punctuation">(</span>document<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"jdom.xml"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    

    }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

生成结果:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>&lt;![CDATA[国内最新新闻]]&gt;</title>
  </channel>
</rss>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、DOM4J生成XML

1.DOM4JTest2.java

package personal.caojx;

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.*;
import java.util.Iterator;
import java.util.List;

/**

  • ProjectName: xml-java

  • ClassName:DOM4JTest.java

  • @Description: Dom4j生成XML

  • @version: v1.0.0

  • @author: caojx

  • @date: 2017/9/24 下午9:45

  • @since JDK 1.8
    */
    public class DOM4JTest2 {

    public static void main(String[] args) throws DocumentException {
    //1.创建document对象,代表整个xml文档
    Document document = DocumentHelper.createDocument();
    //2.创建根节点
    Element rss = document.addElement(“rss”);
    //3.向rss节点中添加version属性
    rss.addAttribute(“version”,“2.0”);
    //4.生成子节点和节点内容
    Element channel = rss.addElement(“channel”);
    Element title = channel.addElement(“title”);
    title.setText("<![CDATA[国内最新新闻]]>");
    //设置生成xml的格式
    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    outputFormat.setEncoding(“GBK”);
    //5.生成xml文件
    File file = new File(“dom4j.xml”);
    XMLWriter writer = null;
    try {
    writer = new XMLWriter(new FileOutputStream(file), outputFormat);
    //设置对于特殊字符是否转义,默认是true转义
    writer.setEscapeText(false);
    writer.write(document);
    writer.close();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

生成结果:

<?xml version="1.0" encoding="GBK"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[国内最新新闻]]></title>
  </channel>
</rss>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
                                </div><div><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-ff98e99283.css" rel="stylesheet">
                            </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值