使用Java創建XML數據


------------siwuxie095

   

   

   

   

   

   

工程名:TestCreateXML

包名:com.siwuxie095.xml

類名:CreateXML.java

   

   

工程結構目錄如下:

   

   

   

   

代碼:

   

package com.siwuxie095.xml;

   

import java.io.File;

import java.io.StringWriter;

   

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

   

import org.w3c.dom.Document;

import org.w3c.dom.Element;

   

public class CreateXML {

   

/**

* 使用Java語言實現創建XML數據和輸出XML數據

* DOM方式操作和生成XML數據

*

* @param args

*/

public static void main(String[] args) {

 

//創建一個新的 DocumentBuilderFactory

//使用靜態方法調用 newInstance()方法,創建一個新的實例

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

 

 

try {

 

//創建一個 DocumentBuilder

//有異常拋出,用 try catch 捕獲

DocumentBuilder builder=factory.newDocumentBuilder();

 

 

//創建一個全新的 XML 文檔:Document

//(注意:使用 org.w3c.dom 包中的 Document 類)

Document document=builder.newDocument();

 

 

//先添加一個根元素:root,並指定標簽:languages

Element root=document.createElement("languages");

//設置根元素的屬性,鍵值對

root.setAttribute("category", "it");

 

 

Element lan1=document.createElement("lan");

lan1.setAttribute("id", "1");

Element name1=document.createElement("name");

name1.setTextContent("Java");

Element ide1=document.createElement("ide");

ide1.setTextContent("Eclipse");

 

 

Element lan2=document.createElement("lan");

lan2.setAttribute("id", "2");

Element name2=document.createElement("name");

name2.setTextContent("Swift");

Element ide2=document.createElement("ide");

ide2.setTextContent("Xcode");

 

 

Element lan3=document.createElement("lan");

lan3.setAttribute("id", "3");

Element name3=document.createElement("name");

name3.setTextContent("C#");

Element ide3=document.createElement("ide");

ide3.setTextContent("Visual Studio");

 

 

 

//元素創建完畢后,將 name 元素和 ide 元素添加到 lan 元素中

//使之成為 lan 元素的子節點

//傳入的是Node類型,而Element是繼承自Node的,所以可以傳入

lan1.appendChild(name1);

lan1.appendChild(ide1);

 

lan2.appendChild(name2);

lan2.appendChild(ide2);

 

lan3.appendChild(name3);

lan3.appendChild(ide3);

 

 

 

//同理:將 lan 添加到 root

root.appendChild(lan1);

root.appendChild(lan2);

root.appendChild(lan3);

 

 

//最后,將 root 添加到 document 中,

//實現 XML 數據的節點一層一層包裝,最終包裝到 root document

document.appendChild(root);

 

 

 

 

//-----------------------------------------------------------------

//XML數據准備完成,將當前創建好的 XML 數據,通過網絡以字符串的形式傳遞

//(關鍵是:怎么將XML數據轉換成字符串)

 

 

//創建一個 TransformerFactory,同樣通過靜態方法調用類的newInstance()方法

//獲取一個新的實例

TransformerFactory transformerFactory=TransformerFactory.newInstance();

 

 

//創建一個 Transformer,可以將 XML 文檔轉換成其他格式

//有異常拋出,用 try catch 捕獲

Transformer transformer=transformerFactory.newTransformer();

 

 

//調用 Transformer transform() 方法,傳入的參數類型很奇怪

//第一個參數(輸入值)是 Source 類型,第二個參數(輸出值)是 Result 類型

//第一個參數(輸入值)是固定的,由於 Source 是通過 document 來創建的,

//傳入匿名對象 new DOMSource()DOMSource()的參數是Node類型,

// Document 也是繼承自Node,所以可以傳入 document,將 XML 文檔作為轉換的源

//

//第二個參數(輸出值)可以有2種方法,

//第一個可以轉換為字符串,第二個可以轉換為文件

//傳入匿名對象 new StreamResult(),支持File輸出一個文件,也支持 Writer寫出

//如果想讓XML數據通過網絡傳播,需要轉換成字符串,這就需要傳入 Writer

//先創建一個 StringWriter

//有異常拋出,用 try catch 捕獲

StringWriter writer=new StringWriter();

transformer.transform(new DOMSource(document), new StreamResult(writer));

 

 

//最后將 StringWriter 轉換為 字符串

//輸出只有一行,是純粹的XML內容,丟失了換行符、縮進符

System.out.println(writer.toString());

 

 

//轉換成文件,第二個參數的參數傳入文件對象

transformer.transform(new DOMSource(document),

new StreamResult(new File("languages.xml")));

 

 

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (TransformerConfigurationException e) {

e.printStackTrace();

} catch (TransformerException e) {

e.printStackTrace();

}

 

 

}

   

}

   

   

運行一覽:

   

   

   

   

languages.xml 的內容:

   

   

   

   

格式化 languages.xml:

Ctrl+Shift+F,或 全選(Ctrl+A),再 Ctrl+I

   

   

   

   

運行后,工程結構目錄一覽:

   

   

   

   

   

   

【made by siwuxie095】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM