xml加強筆記

1 課程回顧

XML基礎

                  1)XML的作用

                                    1.1 作爲軟件配置文件

                                    1.2 作爲小型的“數據庫”

                  2)XML語法(由w3c組織規定的)

                                    標籤: 

                                                      標籤名不能以數字開頭,中間不能有空格,區分大小寫。有且僅有一個根標籤。

                                    屬性:             

                                                      可有多個屬性,但屬性值必須用引號(單引號或雙引號)包含,但不能省略,也不能單                                                雙混用。

                                    文檔聲明:

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

                                                      encoding="utf-8": 打開或解析xml文檔時的編碼

                                                      注意:

                                             保存xml文檔時的編碼 和 解析xml文檔時的編碼要保持一致,才能避免中文亂碼問題!

                  3)XML解析

                                    程序讀取或操作xml文檔

 

                                    兩種解析方式:   DOM解析   vs   SAX解析

 

                                    DOM解析原理:一次性把xml文檔加載成Document樹,通過Document對象得到節點對象,通過節點對象訪問xml文檔內容(標籤,屬性,文本,註釋)。

 

                                    Dom4j工具(基於DOM解析原理):

                                                      讀取xml文檔:

                                                                   Document doc = newSAXReader().read("xml文件");

 

                                                      節點:

                                                                        nodeIterator();  所有節點

                                                      標籤:

                                                                        element("名稱")   指定名稱的第一個子標籤對象

                                                                        elementIterator("名稱");  指定名稱的所有子標籤對象

                                                                        elements();  所有子標籤對象

                                                      屬性:

                                                                        attributeValue(“名稱”)指定名稱的屬性值

                                                                        attribute("名稱")   指定名稱的屬性對象

                                                                                          getName()  屬性名稱

                                                                                          getValue()  屬性值

                                                                        atributeIterator()   所有屬性對象(Iterator)

                                                                        attributes()       所有屬性對象(List)

                                                      文本:

                                                                        getText()  得到當前標籤的文本

                                                                        elementText("子標籤名稱")  得到子標籤的文本

                 

                                   

今天的目標:     Dom4J修改xml   + xPath技術  + SAX解析 + XML約束

2 Dom4j修改xml文檔

              2.1 寫出內容到xml文檔

                                    XMLWriter writer = newXMLWriter(OutputStream, OutputForamt)

                                    wirter.write(Document);

 

              2.2 修改xml文檔的API

                           增加:

                                             DocumentHelper.createDocument()  增加文檔

                                             addElement("名稱")  增加標籤

                                             addAttribute("名稱",“值”)  增加屬性

                           修改:

                                             Attribute.setValue("值")  修改屬性值

                                             Element.addAtribute("同名的屬性名","值")  修改同名的屬性值

                                             Element.setText("內容")  修改文本內容

                           刪除

                                             Element.detach();  刪除標籤 

                                             Attribute.detach();  刪除屬性

3 xPath技術 

                     3.1引入

                           問題:當使用dom4j查詢比較深的層次結構的節點(標籤,屬性,文本),比較麻煩!!!

                     3.2xPath作用

                                    主要是用於快速獲取所需的節點對象。

 

                     3.3在dom4j中如何使用xPath技術

                                    1)導入xPath支持jar包。  jaxen-1.1-beta-6.jar

                                    2)使用xpath方法

                                                      List<Node>  selectNodes("xpath表達式");   查詢多個節點對象

                                                      Node       selectSingleNode("xpath表達式");  查詢一個節點對象

                                   

                     3.4xPath語法

                                    /     絕對路徑      表示從xml的根位置開始或子元素(一個層次結構)

                                    //    相對路徑       表示不分任何層次結構的選擇元素。

                                    *     通配符         表示匹配所有元素

                                    []     條件           表示選擇什麼條件下的元素

                                    @    屬性            表示選擇屬性節點

                                    and    關係          表示條件的與關係(等價於&&)

                                    text()    文本           表示選擇文本內容

               3.5 案例

                                    用戶登錄功能:

                                             用戶輸入用戶名和密碼 -> 到“數據庫”查詢是否有對應的用戶->

                                                      有: 則表示登錄成功

                                                      沒有: 則表示登錄失敗

 

                                    用xml當做數據庫

                                                      user.xml   用來存儲用戶的數據

 

4 SAX解析

                     4.1回顧DOM解析

                                    DOM解析原理:一次性把xml文檔加載進內存,然後在內存中構建Document樹。

                                                                        對內存要求比較要。    

                                                      缺點: 不適合讀取大容量的xml文件,容易導致內存溢出。

                                            

                                    SAX解析原理: 加載一點,讀取一點,處理一點。對內存要求比較低。

 

                     4.2SAX解析工具  

                                             SAX解析工具-  Sun公司提供的。內置在jdk中。org.xml.sax.*

 

                                             核心的API:

                                                        SAXParser類: 用於讀取和解析xml文件對象

                                                                        parse(File f, DefaultHandler dh)方法:解析xml文件

                                   

                                                      參數一: File:表示 讀取的xml文件。

                                                 參數二: DefaultHandler: SAX事件處理程序。使用DefaultHandler的子類

例如:{

                  1.創建SAXParser對象 

              SAXParser parser=SAXParserFactory.newInstance().newSAXParser();

                  2.調用parse方法

            parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());

}              [一個類繼承class 類名(extends DefaultHandler  在調用是創建傳進去

 

                                    DefaultHandler類的API:

                                                      void startDocument()  :  在讀到文檔開始時調用

                                                      void endDocument()  :在讀到文檔結束時調用

                                                      voidstartElement(String uri, String localName, String qName, Attributes attributes) :讀到開始標籤時調用                                    

                                                      voidendElement(String uri, String localName, String qName)   :讀到結束標籤時調用

                                                      voidcharacters(char[] ch, int start, int length) 讀到文本內容時調用

 

                                   

                                             ============DOM解析    vs  SAX解析             ========

        

DOM解析

SAX解析

原理: 一次性加載xml文檔,不適合大容量的文件讀取

原理: 加載一點,讀取一點,處理一點。適合大容量文件的讀取

DOM解析可以任意進行增刪改成

SAX解析只能讀取

DOM解析任意讀取任何位置的數據,甚至往回讀

SAX解析只能從上往下,按順序讀取,不能往回讀

DOM解析面向對象的編程方法(Node,Element,Attribute),Java開發者編碼比較簡單。

SAX解析基於事件的編程方法。java開發編碼相對複雜。

 

                  總結:

                                    1)Dom4j修改xml文檔

                                              new XMLWrier();

                                                      ......

                                    2)xPath技術: 快速查詢xml節點

                                                      selectNodes()

                                                      selectSinglNode();

                                             xpath表達式語言          

                                    3) SAX解析

                                                      SAXParser parse

                                                               parser()

                                             DefaultHandler類:

                                                               startElement();

                                                               characters();

                                                               endElement();

 

作業:

                          

                  設計一個通訊錄程序

                                    聯繫人: 編號  姓名  性別  年齡  電話  QQ 郵箱

                                    功能要求:

                                             添加聯繫人

                                             修改聯繫人

                                             刪除聯繫人

                                             查詢所有聯繫人

                                   

                           要求:

                           1)交互使用console(控制檯)

                           2)數據存儲到xml文件(作爲“數據庫”)(使用dom4j)

 

         提示:

                           啓動程序

                                             ================

                                             【1】添加聯繫人

                                             【2】修改聯繫人

                                             【3】刪除聯繫人

                                             【4】查詢所有聯繫人

                                             【Q】退出程序

                                             ==================

                           輸入 1:

                                             請輸入編號:

                                             請輸入姓名:

                                             請輸入年齡

                                      。。。。

                                             添加成功!  -> 數據保存在xml中

 

                          輸入2

                                             。。。。。。

                           輸入4

                                             編號  姓名   年齡 。。。。

                                             001   張三  30

                                             002   李四 20 。。。

                                             。。。。。

 

 

                           

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