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 為了避免...