XML編程(CRUD)

 

一、JAXP

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

在 javax.xml.parsers 包中,定義了幾個工廠類,程序員調用這些工廠類,可以得到對xml文檔進行解析的 DOM 或 SAX 的解析器對象。

2、使用JAXP進行DOM解析

javax.xml.parsers 包中的DocumentBuilderFactory用於創建DOM模式的解析器對象 , DocumentBuilderFactory是一個抽象工廠類,它不能直接實例化,但該類提供了一個newInstance方法 ,這個方法會根據本地平臺默認安裝的解析器,自動創建一個工廠的對象並返回。

3、     獲得JAXP中的DOM解析器

(1) 調用 DocumentBuilderFactory.newInstance() 方法得到創建 DOM 解析器的工廠。

(2) 調用工廠對象的 newDocumentBuilder方法得到 DOM 解析器對象。

(3) 調用 DOM 解析器對象的 parse() 方法解析 XML 文檔,得到代表整個文檔的 Document 對象,進行可以利用DOM特性對整個XML文檔進行操作了。

二、DOM編程

1、DOM模型(document object model)

Ø DOM解析器在解析XML文檔時,會把文檔中的所有元素,按照其出現的層次關係,解析成一個個Node對象(節點)。

Ø 在dom中,節點之間關係如下:

²    位於一個節點之上的節點是該節點的父節點(parent)

²    一個節點之下的節點是該節點的子節點(children)

²    同一層次,具有相同父節點的節點是兄弟節點(sibling)

²    一個節點的下一個層次的節點集合是節點後代(descendant)

²    父、祖父節點及所有位於節點上面的,都是節點的祖先(ancestor)

Ø         節點類型

三、Node對象

1、Node對象提供了一系列常量來代表結點的類型,當開發人員獲得某個Node類型後,就可以把Node節點轉換成相應的節點對象(Node的子類對象),以便於調用其特有的方法。(查看API文檔)

2、        Node對象提供了相應的方法去獲得它的父結點或子結點。編程人員通過這些方法就可以讀取整個XML文檔的內容、或添加、修改、刪除XML文檔的內容了。

四、添加節點【重點】

//節點的添加

       public static void createElement(Document doc) throws Exception{

              //確定添加節點的位置:父節點

              Node book=doc.getElementsByTagName("書").item(0);

              //生成一個新節點

              Element element=doc.createElement("出版社");

              //element.setTextContent("清華大學");

              Text text=doc.createTextNode("清華大學出版社");

              element.appendChild(text);

              //在指定位置把新生成的節點添加進去

              book.appendChild(element);

              //將內存中樹狀的結構doc把寫入到xml文件

              //(1)生成工廠對象

              TransformerFactory factory=TransformerFactory.newInstance();

              //(2)由工廠對象生成轉換對象Transformer

              Transformer trans=factory.newTransformer();

              //(3)通過trans實現doc轉換到xml文檔中,需要一個DOMSource對象代表源樹

              trans.transform(new DOMSource(doc),new StreamResult(new File("src/book.xml")) );

       }

       public static void createFixedElement(Document doc) throws Exception{

              //確定插入點的位置

              Node author=doc.getElementsByTagName("作者").item(0);

              Node parent=author.getParentNode();

              Node brother=author.getNextSibling();

              //創建一個新節點

              Element element=doc.createElement("出版社");

              element.setTextContent("清華大學出版社");

             

              //插入節點:在書這個節點中在作者節點之前添加了出版社

              parent.insertBefore(element,brother);

             

                           

              //將內存中樹狀的結構doc把寫入到xml文件

              //(1)生成工廠對象

              TransformerFactory factory=TransformerFactory.newInstance();

              //(2)由工廠對象生成轉換對象Transformer

              Transformer trans=factory.newTransformer();

              //(3)通過trans實現doc轉換到xml文檔中,需要一個DOMSource對象代表源樹

              trans.transform(new DOMSource(doc),new StreamResult(new File("src/book.xml")) );

       }

五、刪除結點

public static void deleteElement(Document doc) throws Exception{

              //獲取要刪除的那個節點對象

              Node node=doc.getElementsByTagName("售價").item(1);

              node.getParentNode().removeChild(node);

             

             

              //將內存中樹狀的結構doc把寫入到xml文件

              //(1)生成工廠對象

              TransformerFactory factory=TransformerFactory.newInstance();

              //(2)由工廠對象生成轉換對象Transformer

              Transformer trans=factory.newTransformer();

              //(3)通過trans實現doc轉換到xml文檔中,需要一個DOMSource對象代表源樹

              trans.transform(new DOMSource(doc),new StreamResult(new File("src/book.xml")) );

       }

六、修改節點

public static void updateElement(Document doc) throws Exception{

              //獲取要修改的那個節點

              Node node=doc.getElementsByTagName("售價").item(0);

              node.setTextContent("50");

              if(node instanceof Element){

                     Element element=(Element)node;

                     Attr att=element.getAttributeNode("type");

                     att.setValue("美元");

              }

             

             

              //將內存中樹狀的結構doc把寫入到xml文件

              //(1)生成工廠對象

              TransformerFactory factory=TransformerFactory.newInstance();

              //(2)由工廠對象生成轉換對象Transformer

              Transformer trans=factory.newTransformer();

              //(3)通過trans實現doc轉換到xml文檔中,需要一個DOMSource對象代表源樹

              trans.transform(new DOMSource(doc),new StreamResult(new File("src/book.xml")) );

       }

 

<書名>jsp</書名>

Node節點node           node.getNodeType()  類型

——元素element         node.getNodeName() 名稱

                                   node.getNodeValue()  返回的爲NULL  因爲Element節點,所以nodeValue值爲null

node.getTextContent  jsp程序設計

Text text=(Test)node.getChildNodes().item(0);

Text.getNodeValue();——jsp程序設計  因爲文本節點,所以nodeValue值,是jsp程序設計

 

1 類型 2 元素 3 文本

void func(Node node){

       //

}

Node是接口類型

func(doc);實參:可以是Node類型對象,還可以是Node的子類的對象

當形參是接口類型,那麼實參是實現了該接口的類的對象。
發佈了42 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章