第二十二章 JAVA眼中的XML 檔案寫入

2021-08-04 06:41:06 字數 2651 閱讀 4825

這裡我們學習如何使用dom方法生成乙個xml檔案,還是先開啟上節課讀取xml的**。這裡生成方法的前兩步都是一樣的,所以可以把這兩步提取出來做乙個方法來提高**的復用率。

開啟生成的xml檔案,第一行宣告有乙個standalone=」no」,如果這個standalone=yes,是說明我們當前的xml檔案是沒有dtd和schema作為它的說明文件的。如果=no說明它是有這兩個作為解釋說明它的內容允許有哪些值以及值的一些允許的形式,由於我們當前的xml檔案是乙個很簡單的xml檔案,它不涉及格式說明要求,所以我們不需要這個standalone,所以說我們應該將它設定成yes並且不顯示在我們的第一行宣告部分。那如何去掉呢?還有關於生成的xml檔案內容怎麼換行以提高閱讀效果,具體的解決方法都在**中可以體現出來

public

class

domtest catch (parserconfigurationexception e)

return db;

}/**

* 生成xml的方法

*/public

void

createxml() catch (transformerconfigurationexception e) catch (transformerexception e)

}public

static

void

main(string args)

}

sax生成xml的準備工作,這裡我們將之前的saxtest進行一下修改,將main方法中進行解析xml的方法提取出來作為乙個方法,並且已知我們之前進行了物件的賦值儲存list,該方法返回乙個我們之前儲存了book物件的list,本節的目的就是用這兩個物件使用sax方式生成xml檔案。

public void createxml()

//建立author節點

if(book.getauthor()!=null&&book.getauthor().trim()!="")

//建立year節點

if(book.getyear()!=null&&book.getyear().trim()!="")

//建立price節點

if(book.getprice()!=null&&book.getprice().trim()!="")

//建立languager節點

if(book.getlanguage()!=null&&book.getlanguage().trim()!="")

handler.endelement("","","book");

}handler.endelement("","","bookstore");

//關閉document

handler.enddocument();

} catch (transformerconfigurationexception e) catch (filenotfoundexception e) catch (ioexception e) catch (saxexception e)

}

注意:如果將準備工作的3,4步挪到result後面將是失效的,如果將第六步挪到最後會提示必須先呼叫result,才可以使用。

什麼是rss?

之前我們已經學習了如何用dom和sax來生成xml檔案,接下來我們來學習如何使用dom4j來生成。本節課我們生成的xml檔案會和之前有所不同,本節課我們學習如何來生成乙個rss格式的xml檔案,那什麼是rss呢?這裡是我之前找到的乙個rss源,rss通常是用來描述和同步**內容的一種格式,其實它的本質就是xml,我們在rss源這個頁面上右鍵,檢視源**,可以看到呈現給我們的乙個源**,其實就是乙個xml檔案,只不過它的格式是有一些特殊的。

如果我們生成的內容有特殊符號怎麼辦?比如說通常用<>來包裹標籤,如果內容中也出現<>會出現什麼情況,它會自動給我們進行轉義,可是我們不希望生成的文字中括號給我們轉義,那麼很簡單,我們可以通過一行**就可以解決,通過writer.setescapetext(false);方法設定是否轉義。

/**

*生成xml

*/public

void

ceratexml() catch (ioexception e)

}

/**

* 生成xml

*/public

void

createxml() catch (ioexception e)

}

四種生成方法的理論對比

就解析而言,dom基於樹結構,sax是基於事件驅動的,jdom和dom4j都是基於底層api,底層api就是指的官方提供給我們的解析方式,就是dom和sax。

在dom生成中,我們dom生成的dom樹它會駐留在我們的記憶體中,也就是首先我們會生成乙個根節點,然後會在根節點中生成根節點下的子節點。駐留在記憶體中的好處是什麼呢?可以隨時刪除或者修改,接下來我們也可以針對dom樹進行重新排列,方便我們修改。sax生成是不能走回頭路的,如果不會頻繁修改建議sax,修改多的可以考慮dom。進行生成速度比較的話,dom慢sax快,dom4j次之。

第二十二章 Teamware需求

teamware正如他的名字一樣,是乙個團隊使用的groupware。groupware的定義是 teamware的功能需求 公共功能 使用者管理 角色管理 客戶管理 crm 專案管理 安全 授權和認證 業務功能 公告欄 notice 位址本 address book todo列表 todo lis...

第二十二章 橋接模式

很多情況下用繼承會帶來麻煩。比如,物件的繼承關係是在編譯時就定義好了的,所以無法在執行時改變從父類繼承的實現。子類的實現與它的父類有非常緊密的依賴關係,以至於父類實現中的任何變化必然會導致子類發生變化。當你需要復用子類時,如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這...

第二十二題

第二十二題 韓信點兵 在中國數學史上,廣泛流傳著乙個 韓信點兵 的故事 韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點名的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數 按從1到5報數,記下最末乙個士兵報的數為1 按從1...