XML編程(CRUD)-create read update delete(DOM解析)

XML解析方式分爲兩種:dom和sax

 .dom:(Document Object Model,即文檔對象模型)

  是W3C組織推薦的解析XML的一種方式

 .sax :(Simple API for XML),不是官方標準,但它是XML社區事實上的標準,幾乎所有的XML解析器都支持它

Dom和sax解析方法的區別

1.dom解析的優點是對文檔crud比較方便,缺點是佔用內存比較大

2.sax解析的優點是佔用內存少,解析速度快,缺點是隻適合做文檔的讀取,不適合做文檔的crud

調整jvm(java虛擬機)大小

XML解析開發包

  jaxp(sun),jdom,dom4j


JAXP:

   JAXP開發包是J2SE的一部分,由javax.xml,org.w3c.dom,org.xml.sax包及其子包組成

  在javax.xml.parsers包中,定義了幾個工廠類,程序調用這幾個工廠類,就可以得到xml文檔的DOM或SAX的解析器,從而實現對XML的解析

更新XML:javax.xml.transform包中Transformer類用於把XML文件的Document對象轉換爲某種格式後進行輸出,例如把xml文件應用樣式錶轉換成一個html文檔。利用這個對象,當然也可以把Document對象又重新寫入到XML文檔中

   Transformer類通過transform方法完成轉換操作,該方法接收一個源和一個目的地。通過

     .javax.xml.transform.dom.DOMSource類來關聯要轉換的document對象

     .用javax.xml.transform.stream.StreamResult對象來表示數據的目的地

    .Transformer對象通過TransformerFactory獲得

舉例:book.xml

<?xml version="1.0" encoding="UTF-8" ?>

<書架>

    <書> 

        <書名 name = "xxxx ">java 就業培訓教程</書名>

        <作者>張孝祥</作者>  

        <售價>39.00元</售價>

    </書>

    <書> 

        <書名 >javaScript網頁製作</書名>

        <作者>張孝祥</作者>  

        <售價>28.00元</售價>

    </書>

</書架>

1.創建工廠

   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

2.得到DOM解析器

 DocumentBuilder builder = factory.newDocumentBuilder();

3.解析XML,得到代表文檔的document

 Document document = builder.pase("src/book.xml")

4.使用dom方式對xml文檔進行crud

----// 讀xml文檔中:<書名>javaScript網頁開發</書名>  節點中的值

NodeList list = document .getElementsByTagName("書名");

Node node = list.item(1);

String content = node.getTextContent();

system.out.println(content);——>結果顯示:javaScript網頁開發

---// 得到xml標籤屬性的值:<書名 name="xxxx" >javaScrip就業培訓課程</書名>  

Element bookname =  document.getElementsByTagName("書名").item(0);

String value = bookname.getAttribute("name");

system.out.println(value );——>結果顯示:xxxx

-----//向xml文檔中指定位置上添加節點:<售價>59.00元</售價>

 //創建節點

  Element price = document.createElement("售價");

 price.setTextContent("59.00元");

// 得到參考節點

Element refNode = (Element)document.getElementByTagName("售價").item(0);

//得到要掛孩子的節點

Element book= (Element)document.getElementByTagName("書").item(0);

//往book節點指定位置插孩子

book.insertBefore(price,refNode );

//更新後的內存寫到xml文檔中

 TransformerFactory tffactory = TransformerFactory.newInstance();

Transformer tf = tffactory .newTransformer();

tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml")))

結果:

<?xml version="1.0" encoding="UTF-8" ?>

<書架>

    <書> 

        <書名 name = "xxxx ">java 就業培訓教程</書名>

        <作者>張孝祥</作者>  

        <售價>59.00元</售價>

        <售價>39.00元</售價>

    </書>

    <書> 

        <書名 >javaScript網頁製作</書名>

        <作者>張孝祥</作者>  

        <售價>28.00元</售價>

    </書>

</書架>

//得要要刪除的節點

  Element e = (Element)document.getElementByTagName("售價").item(0);

////得到要刪除節點的爸爸

//Element book= (Element)document.getElementByTagName("書").item(0);

////爸爸再刪孩子

//book.removeChid(e);

 e.getParentNode().removeChild(e);

//更新後的內存寫到xml文檔中

 TransformerFactory tffactory = TransformerFactory.newInstance();

Transformer tf = tffactory .newTransformer();

tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml"))

//更新售價

Element e = (Element)document.getElementByTagName("售價").item(0);

e.setTextContent("109.00元");

//更新後的內存寫到xml文檔中

 TransformerFactory tffactory = TransformerFactory.newInstance();

Transformer tf = tffactory .newTransformer();

tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml"))



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章