Java 寫入XML檔案
DOM和SAX方式是JAVA官方提供的方式,可以生成一個XML檔案來儲存資訊,DOM4J和JDOM是非官方的方式,可以生成一個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,要麼以檔案的形式進行解析,
【java】xml檔案表建立及讀取環境搭建並採用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;只
java中xml檔案的有效驗證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