1. 程式人生 > >Java 寫入XML檔案

Java 寫入XML檔案

DOMSAX方式是JAVA官方提供的方式,可以生成一個XML檔案來儲存資訊,DOM4JJDOM是非官方的方式,可以生成一個RSS檔案

一、DOM方式生成XML文件

DOMTest:

public class DOMTest {
    /*生成xml*/
    public void createXML() throws Exception{
        DocumentBuilder db=getDocumentBuilder();
        Document document=db.newDocument();
        Element bookstore=document.createElement("bookStore"
); //向bookstore根節點中新增位元組點book Element book=document.createElement("book"); Element name=document.createElement("name"); book.appendChild(name); name.setTextContent("小王子"); book.setAttribute("id", "1"); //將book節點新增到bookstore根節點中 bookstore.appendChild(book); //將bookstore節點(已經包含了book),新增到dom樹中
document.appendChild(bookstore); //建立TransformerFactory物件 TransformerFactory tff=TransformerFactory.newInstance(); //建立Transformer物件 Transformer tf=tff.newTransformer(); //換行檔案內容 tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.transform(new
DOMSource(document), new StreamResult(new File("boos1.xml"))); } public static void main(String []args) throws Exception{ DOMTest test=new DOMTest(); test .createXML(); } }

執行結果為:

建立之後的books1.xml的顯示內容:

二、SAX方式生成XML文件

/**
* @Decription TODO sax方法建立一個xml文件
*/
public void saxCreateXml(){
    //1、建立一個SAXTransformerFactory一個物件
    SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
    OutputStream in =null;
    try {
        //2、通過SAXTransformerFactory建立一個TransformerHandler物件
        TransformerHandler handler = sf.newTransformerHandler();
        //3、通過TransformerHandler物件獲取Transformer物件(用於設定xml輸出的樣式和頭)
        Transformer transformer = handler.getTransformer();
        //設定沒有其他的DTD(Document Type Defination 文件型別定義)規範
        transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
        //設定編碼格式,顯式的顯示在<?xml version="1.0" ?>中
        transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
        //設定換行
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        //檔案輸出
        File file =new File("LocListSax.xml");
        //確保file是存在的
        if(!file.exists()){
            if(!file.createNewFile()){
                throw new FileNotFoundException("檔案建立失敗!");
            }
        }
        //4、建立輸出流OutputStream物件
        in = new FileOutputStream(file);
        //5、建立流Result物件
        Result result = new StreamResult(in);
        //6、關聯result,此時有了生成元素的方法(handler提供的方法)和裝元素的容器(result物件)
        handler.setResult(result);
        //開啟文件
        handler.startDocument();
        //屬性設定
        AttributesImpl attr = new AttributesImpl();
        //開始建立元素
        handler.startElement("", "", "Location", attr);
        attr.addAttribute("", "", "Name", "", "阿爾巴尼亞");
        attr.addAttribute("", "", "Code", "", "DZA");
        handler.startElement("", "", "CountryRegion", attr);
        attr.clear();
        attr.addAttribute("", "", "Name", "", "阿德拉爾");
        attr.addAttribute("", "", "Code", "", "ADR");
        handler.startElement("", "", "State", attr);
        handler.endElement("", "", "State");
        handler.endElement("", "", "CountryRegion");
        //結束元素建立
        handler.endElement("", "", "Location");
        //關閉文件
        handler.endDocument();
    } catch (TransformerConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }   finally{
            try {
                //關閉流, 習慣不好,老是不喜歡關閉流
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

}

三、 JDOM 方式生成 XML 文件

public class JDOMTest {

    private void createXML() throws Exception{
        //1.生成一個根節點
        Element rss=new Element("rss");
        //2.為節點新增屬性
        rss.setAttribute("version", "2.0");
        //3.生成一個document的物件
        Document document=new Document(rss);
        Element channel=new Element("channel");
        rss.addContent(channel)    ;
        Element title=new Element("title");
        //title.setText("<國內最新新聞>");
        //設定轉義字元符號
        title.setContent(new CDATA("<!CDATA上海移動網際網路產業促進中心正式揭牌>"));
        //<!CDATA上海移動網際網路產業促進中心正式揭牌]]>
        //title.setText(new CDATA("<國內最新新聞>"));//這樣子可以處理特殊字元
        channel.addContent(title);
        //設定生成xml的格式
        Format format=Format.getCompactFormat();
        format.setIndent("");
        //生成不一樣的編碼
        format.setEncoding("GBK");
        //4.建立XMLOutputter的物件
        XMLOutputter outputter=new XMLOutputter(format);
        //5.利用outputter將document物件轉換成xml文件
        outputter.output(document, new FileOutputStream(new File("rssnews.xml")));


    }
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
            new JDOMTest().createXML();
    }

}

執行結果為:

建立的檔案(rssnews.xml)

<?xml version="1.0" encoding="GBK"?>
<rss version="2.0">
<channel>
<title><![CDATA[<!CDATA上海移動網際網路產業促進中心正式揭牌>]]></title>
</channel>
</rss>

四、DOM4J 方式生成XML文件

public class DOM4JTest {

    private void createXML() throws Exception{
        //1.建立document物件,代表整個xml文件
        Document document=DocumentHelper.createDocument();
        //2.建立根節點
        Element rss=document.addElement("rss");
        //3.向rss節點中新增version,自動生成預設編碼模式(UTF-8)
        rss.addAttribute("version", "2.0");
        //4.生成子節點及節點內容
        Element channel=rss.addElement("channel");
        Element title=channel.addElement("title");
        //title.setText("中國最新新聞");
        title.setText("<!CDATA上海移動網際網路產業促進中心正式揭牌]]>");
        //5.設定生成xml的格式
        OutputFormat format=OutputFormat.createPrettyPrint();
        //生成不一樣的編碼
        format.setEncoding("GBK");
        //6.生成xml檔案
        File file=new File("rssnews.xml");
        XMLWriter writer=new XMLWriter(new FileOutputStream(file),format);
        //設定是否轉義,預設設定是true,代表轉義
        writer.setEscapeText(false);
        writer.write(document);
        writer.close();
    }
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        new DOM4JTest().createXML();
    }

}

執行結果為:

rssnews.xml

<?xml version="1.0" encoding="GBK"?>

<rss version="2.0">
  <channel>
    <title><!CDATA上海移動網際網路產業促進中心正式揭牌]]></title>
  </channel>
</rss>

不同生成方法大PK

public class CreateTest {
    /**
     * DOM方式生成xml文件
     */
    public void DOMCreateXML() throws Exception{
        // 建立一個DocumentBuilderFactory
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        // 建立一個DocumentBuilder物件
        DocumentBuilder db = dbf.newDocumentBuilder();
        //DocumentBuilder db=getDocumentBuilder();
        Document document=db.newDocument();
        document.setXmlStandalone(true);    
        Element bookstore=document.createElement("bookStore");
        //向bookstore根節點中新增位元組點book
        Element book=document.createElement("book");
        Element name=document.createElement("name");
        book.appendChild(name);
        name.setTextContent("小王子");
        book.setAttribute("id", "1");
        //將book節點新增到bookstore根節點中
        bookstore.appendChild(book);
        //將bookstore節點(已經包含了book),新增到dom樹中
        document.appendChild(bookstore);
        //建立TransformerFactory物件
        TransformerFactory tff=TransformerFactory.newInstance();
        //建立Transformer物件
        Transformer tf=tff.newTransformer();
        //換行檔案內容
        tf.setOutputProperty(OutputKeys.INDENT, "yes");
        tf.transform(new DOMSource(document), new StreamResult(new File("books1.xml")));
    }    

    /**
     * SAX方式生成xml文件
     */

    public void SAXCreateXML() throws Exception{
        //生成XML
        //1.建立一個TransformerFactory類的物件
        SAXTransformerFactory tff=(SAXTransformerFactory) SAXTransformerFactory.newInstance();
        //2.通過SAXTransformerFactory物件建立一個TransformerHandler物件
        TransformerHandler handler=    tff.newTransformerHandler();
        //3.通過handler物件建立一個Transformer
        Transformer tr=handler.getTransformer();
        //4.通過Transformer物件對生成的xml檔案進行設定
        //設定xml的編碼
        tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        //設定xml的“是否換行”
        tr.setOutputProperty(OutputKeys.INDENT, "yes");
        //5.建立一個Result物件
        File file=new File("books2.xml");
        if (!file.exists()) {
            file.createNewFile();
        }
        //6.建立Result物件,並且使其與handler關聯
        Result result=new StreamResult(new FileOutputStream(file));
        handler.setResult(result);
        //7.利用handler物件進行xml檔案內容的編寫
        //開啟document
        handler.startDocument();
        AttributesImpl attr=new AttributesImpl();    
        handler.startElement("", "", "bookstore", attr);
        attr.clear();
        attr.addAttribute("", "", "id", "", "1");
        handler.startElement("", "", "book", attr);
        attr.clear();
        handler.startElement("", "", "name", attr);
        handler.characters("小王子".toCharArray(), 0, "小王子".length());
        handler.endElement("", "", "name");
        handler.endElement("", "", "book");
        handler.endElement("", "", "bookstore");
        // 關閉document
        handler.endDocument();
    }


    /**
     * JDOM方式生成xml文件
     */
    private void JDOMCreateXML() throws Exception{
        org.jdom2.Element bookstore=new org.jdom2.Element("bookstore");
        org.jdom2.Document document=new org.jdom2.Document(bookstore);
        org.jdom2.Element book=new org.jdom2.Element("book");
        book.setAttribute("id","1");
        org.jdom2.Element name=new org.jdom2.Element("name");
        name.setText("小王子");
        book.addContent(name);
        bookstore.addContent(book);
        Format format=Format.getCompactFormat();
        format.setIndent("");
        //生成不一樣的編碼
        format.setEncoding("UTF-8");
        //4.建立XMLOutputter的物件
        XMLOutputter outputter=new XMLOutputter(format);
        //5.利用outputter將document物件轉換成xml文件
        outputter.output(document, new FileOutputStream(new File("books3.xml")));
    }

    /**
     * DOM4J方式生成xml文件
     */
    private void DOM4JCreateXML() throws Exception{
        org.dom4j.Document document=DocumentHelper.createDocument();
        org.dom4j.Element bookstore=document.addElement("bookstore");
        org.dom4j.Element book=bookstore.addElement("book");
        book.addAttribute("id", "1");
        org.dom4j.Element name=book.addElement("name");
        name.setText("小王子");
        OutputFormat format=OutputFormat.createPrettyPrint();
        //生成不一樣的編碼
        format.setEncoding("UTF-8");
        //6.生成xml檔案
        File file=new File("books4.xml");
        XMLWriter writer=new XMLWriter(new FileOutputStream(file),format);
        //設定是否轉義,預設設定是true,代表轉義
        writer.setEscapeText(false);
        writer.write(document);
        writer.close();
    }


    @Test
    public void testPerformance() throws Exception{
        System.out.println("效能測試:");
        //測試DOM的效能 
        long start=System.currentTimeMillis();
        DOMCreateXML();
        System.out.println("DOM:"+(System.currentTimeMillis()-start));

        //測試SAX的效能
        start=System.currentTimeMillis();
        SAXCreateXML();
        System.out.println("SAX:"+(System.currentTimeMillis()-start));

        //測試JDOM的效能
        start=System.currentTimeMillis();
        JDOMCreateXML();
        System.out.println("JDOM:"+(System.currentTimeMillis()-start));

        //測試DOM4J
        start=System.currentTimeMillis();
        DOM4JCreateXML();
        System.out.println("DOM4J:"+(System.currentTimeMillis()-start));
    }
}

  

相關推薦

Java 寫入XML檔案

DOM和SAX方式是JAVA官方提供的方式,可以生成一個XML檔案來儲存資訊,DOM4J和JDOM是非官方的方式,可以生成一個RSS檔案 一、DOM方式生成XML文件 DOMTest: public class DOMTest { /*生成xml*

Java 操作 xml 檔案寫入

對於 Java 對 xml 檔案的讀寫,我在網上看了很多版本,結構差不多,根據自己的理解進行了一些總結。 寫入資料到 xml 相對比較簡單,我總結了以下兩種寫入方法,僅供參考! 1、dom4j 寫入 先看程式碼 import java.io.Pr

java對於xml檔案的四種解析方式

概述 XML是一種通用的資料交換格式,它的平臺無關性、語言無關性、系統無關性、給資料整合與互動帶來了極大的方便。XML在不同的語言環境中解析方式都是一樣的,只不過實現的語法不同而已。 XML的解析方式分為四種:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中

Java解析xml檔案的方式

import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; impo

通過XDocument方式把List寫入Xml檔案

List<Person> list=new List<Person>{   new Person(){Name="張三",Age=50,Address="重慶市沙坪壩區"},   new Person(){Name="李四",Age=20,Address="西科公寓"},   n

java讀取xml檔案資料

import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import o

Java解析XML檔案的常用方法介紹

1 import java.io.IOException; 2 3 import javax.xml.parsers.DocumentBuilder; 4 import javax.xml.parsers.DocumentBuilderFactory; 5 import javax.x

Java解析xml檔案遇到“unknown protocol: c Nested exception: unknown protocol: c”問題的解決辦法

在寫畢設的時候在解析XML檔案的時候遇到的一個棘手的問題“unknown protocol: c Nested exception: unknown protocol: c”,翻閱了資料說是tomcat的安裝路徑不能有空格,要麼重新安裝tomcat,要麼以檔案的形式進行解析,

javaxml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫

    java一種簡單的解析xml方法是用DOM進行解析, dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的,dom4j用於處理xml是很常用的技術,本篇部落格介紹xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫。

Java解析xml檔案之增刪改查

XML是什麼: 可擴充套件的標記語言 XML能幹什麼: 描述資料、儲存資料、傳輸(交換)資料。 XML文件節點型別: u     文件(document) u     元素(element) u     屬性(attribu

Java 操作xml檔案的dom4J庫使用

XML簡介 什麼是xml? XML 指可擴充套件標記語言(EXtensible Markup Language) XML 是一種標記語言,很類似 HTML XML 的設計宗旨是傳輸資料,而非顯示資料 XML 標籤沒有被預定義。您需要自行定義標籤。 XM

java格式化XML檔案

現有的xml格式不符合程式的要求,於是動手寫一個格式化xml的小工具。 現有的資料格式是這樣的 格式化之後的效果 格式化xml的方法有很多,我使用的是Dom4j方法 public cla

java解析xml檔案讀取本地dtd或者忽略dtd

Java程式在解析xml檔案時,如果xml檔案中指定了dtd,在預設會從指定的url下載dtd檔案,但是很多情況下如果網路連線不上,或者防火牆原因,dtd檔案無法下載下來導致程式報連線超時異常,解析xml失敗。有兩種方法解決該類問題: 1.指定從本地讀取dtd檔案 若要解析

Java解析XML檔案的四種方式

1 import javax.xml.parsers.SAXParser; 2 import javax.xml.parsers.SAXParserFactory; 3 4 import org.xml.sax.Attributes; 5 import org.xml.sax

java讀取xml檔案的四種方法

1 import javax.xml.parsers.SAXParser; 2 import javax.xml.parsers.SAXParserFactory; 3 4 import org.xml.sax.Attributes; 5 import org.x

java解析xml檔案四種方式

1.介紹 1)DOM(JAXP Crimson解析器) DOM是用與平臺和語言無關的方式表示XML文件的官方W3C標準。DOM是以層次結構組織的節點或資訊片斷的集合。這個層次結構允許開發人員在樹中尋找特定資訊。分析該結構通常需要載入整個文件和構造層次結構,然後才能做任何工作。由於它是基於資訊層次的,因而

java讀取xml檔案並轉換成物件,並進行修改

1.首先要寫工具類,處理讀取和寫入xml檔案使用的工具。XMLUtil.java import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import j

java 解析xml檔案

一、SAX:基於事件流的解析優點:不用事先調入整個文件,佔用資源少;SAX解析器程式碼比DOM解析器程式碼小,適於Applet,下載。缺點:不是持久的;事件過後,若沒儲存資料,那麼資料就丟了;無狀態性;從事件中只能得到文字,但不知該文字屬於哪個元素;使用場合:Applet;只

javaxml檔案的有效驗證dtd收集

1、struts.xml  <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  "http://struts.apache.org/dtd

Java寫入txt檔案內容

Java寫入資料進txt檔案,需求:多條資料追加進檔案,且需要處理中文編碼問題。 以下程式碼只能處理向檔案新增資料的功能,但是會覆蓋掉之前的資料 import java.io.File; i