JAVA學習筆記之(寫入xml)

2021-07-22 15:41:57 字數 4677 閱讀 7911

domf方式生成xml檔案:

二、建立xml檔案

將dom樹轉換成xml檔案

1,建立transforme***ctory物件,factory為工廠類,不能直接new物件,通過newinstance獲取物件

transforme***ctory tff = transforme***ctory.newinstance();

2,通過tff獲取transfomer物件

transformer tf = tff.newtransformer();

3,指定換行格式

tf.setoutputproperty(outputkeys.indent,"yes");

4,用dom樹生成xml檔案,將dom樹以及輸出流作為引數傳入

tf.transform(new domsource(document do),new streamresult(new file("books1.xml"));

三、生成結點間的文字

sax方式生成xml檔案:

使用sax生成xml的準備工作

1,建立saxtransforme***ctory物件,工廠類不能直接new物件

saxtransforme***ctory stf = (saxtransforme***ctory)saxtransforme***ctory.newinstance();

2,建立transformerhandler物件,用於xml檔案節點以及內容的編寫

transformerhandler th = stf.newtransformerhandler();

3,建立transformer物件,用於對生成的xml檔案的格式以及編碼的設定

transformer tr = th.gettransformer();

4,通過transformer物件對xml檔案的編碼以及換行進行設定

tr.setoutputproperty(outputkeys.encoding,"utf-8");

tr.setoutputproperty(outputkeys.indent,"yes");

5,建立乙個流物件供result物件使用

file file = new file("***x");

6,建立result物件,作為xml的檔案輸出流

result result = new streamresult(new fileoutputstream(file));

7,將輸出流物件與編寫xml檔案內容的transformerhandler物件聯絡起來

th.setresult(result);

使用sax生成xml檔案中的節點以及節點屬性

1,開啟document

handler.startdocument();

2,建立屬性物件

attributesiimpl ai = new attributesimpl();

3,建立無屬性節點

handler.startelement("","","bookstore","ai");

4,建立有屬性節點

ai.clear();(清除原有屬性內容)

ai.addattribute("","","id","","1");(設定新的屬性內容)

handler.startelement("","","book","ai");

5,結束節點

handler.endelement();

6,結束document

handler.enddocument();

通過sax生成xml檔案的節點步驟

先生成外圍節點在外圍節點的startelement和endelement中間生成子節點

分兩種情況:

1,有屬性的節點

(1)建立屬性物件,並設定屬性名以及屬性值

attributesimpl ai =new attributesimpl();

ai.addattribute(null,null,name,null,value);

(2)建立節點

handler.startelement(null,null,name,ai)

(3)新增節點內容(若無內容則不用進行這一步)

handler.characters(string.tochararray(),int,int);

(4)結束節點

handler.endelement(null,null,name);

2,無屬性的節點

(1)清空屬性物件

ai.clear();

(2)建立節點

handler.startelement(null,null,name,ai)

(3)新增節點內容(若無內容則不用進行這一步)

handler.characters(string.tochararray(),int,int);

(4)結束節點

handler.endelement(null,null,name);

dom4j生成xml:

使用dom4j建立xml檔案中rss根節點步驟

1,建立document物件,代表著整個xml文件

document do = documenthelper.createdocument();

2,建立根節點rss

element rss = do.addelement("rss");

3,向rss根節點中新增version屬性

rss.addattribute("version","2.0");

4,建立xml文件的輸出流

file file = new file("***");

xmlwriter writer = new xmlwriter(new fileoutputstream(file));

5,將程式所寫的xml文件內容與輸出流聯絡起來

writer.write(do);

6,關閉資源

writer.close();

使用dom4j生成xml檔案中節點以及節點內容的步驟

1,使用根節點物件得到子節點物件

element ele1 = ele.addelement("string");

2,設定子節點文字內容

ele1.settext("string");

3,設定生成的xml文件的格式

outputformat format = outputformat.creatprettyprint();

這個format物件預設為標準格式,需要其他格式可以呼叫該物件的其他方法如:

format.setencoding("gbk");

4,將設定同步到xml文件

writer write = new writer(new fileoutputstream(file),format);

5.通過writer類的物件呼叫setescapetext()方法設定不轉義

write.setescapetext(false);

通過jdom方式生成xml檔案

一、jdom生成xml根節點

1,建立乙個根節點,並設定屬性以及屬性值

element ele = new element("rss");

ele.setattribute("version","2.0");

2,建立document物件,並將element物件傳入進去

document do = new document(ele);

(有了文件之後就考慮如何將文件與要生成的xml檔案聯絡起來,每種解析方式都提供了相應的輸出流,原理都是通過乙個方法將輸出流與document物件聯絡起來)

3,建立輸出流物件

xmloutputter outputer = new xmloutputter(format);

outputer.output(do,new fileoutputstream(new file("***")));

二、新增子節點及節點間文字

通過jdom方式生成子節點以及節點間的文字

將子節點新增進上一級節點

element ele1 = new element("title");

ele.addcontent(ele1);

設定節點間的文字

ele1.settext("國內最新新聞");

title.addcontent(new cdata("《國內最新新聞》"));這樣子可以處理特殊字元

三、jdom設定xml格式

1,建立format物件

format format = format.getcompactformat();

2,設定換行以及編碼

format.setindent("");

format.setencoding("gbk");

3將format物件作為引數傳進輸出流建立方法中

xmloutputter outputer = new xmloutputter(format);

ps:四種方式的比較:

假設我現在要生成乙個xml。讓它去儲存書籍資訊。首先寫根節點bookstore,然後新增第一本書,然後新增第二本書,這時候發現第一本書中有某乙個內容忘記新增了,想回去進行修改或增加。這時候我們發現sax解析是無法做到這一點的,因為sax解析是基於事件的。基於事件的模型呢,把某乙個標籤走完了之後,它是不能走回頭路的,它沒有狀態性可言。所以在使用dom還是sax進行選擇時,要考慮到你是不是要對生成的模型進行頻繁的修改。如果不是呢,建議選用sax,因為sax的效能也是非常高的。說到效能呢。衡量效能的重要指標之一呢,就是生成的速率。

XMl學習之 DTD學習筆記

1.建立乙個檔案,字尾名為.dtd 2.判斷元素是簡單元素還是複雜元素 簡單元素 有子元素的元素複雜元素。複雜元素 有子元素的元素。3.需要在xml檔案中引入dtd檔案 1.引入外部的dtd檔案 2.使用內部的dtd約束 3.使用外部的dtd檔案 網路上的 語法 簡單元素 如 約束 1.pcdata...

學習訪問XML2 寫入XML資料

讀取乙個doc setattribute方法設定屬性 removechild方法刪除乙個子節點 組合用來建立節點 domsource domsource new domsource doc transforme ctory transfactory transforme ctory.newinsta...

學習筆記 XML之轉義字元

在xml文件中的所有文字都會被解析器解析,不合法的xml字元必須被替換為相應的實體。只有在cdata部件之內的文字會被解析器忽略。如果在xml檔案中使用類似 的字元,那麼解析器將會出現錯誤,因為解析器會認為這是個新元素的開始。所以不應該像下面那樣書寫 if salary 1000 then 為了避免...