java程序員第六課DOM&XML

java程序員第六課DOM&XML

1、上節內容回顧
* 表單提交方式:
- type=”submit”
- 使用button ,獲取form,使用form裏面submit()方法
* 事件 onclick onchange onfocus onblur

* xml:可擴展標記型語言(標籤是自定義的)

* xml的應用

* xml語法
    - 文檔聲明:放在第一行第一列  <?xml version="1.0" encoding="utf-8"?>
    - 元素定義:
        ** 有開始標籤也要有結束標籤
        ** 區分大小寫
        ** 不能以數字下劃線 xml.....
    - 屬性定義
    - 轉義字符 < > & " ,
    - CDATA區:將裏面的內容作爲字符串,而不是作爲標籤
    - 處理指令:設置xml的樣式
* 約束有 dtd 和 schema
* dtd約束
    ** 格式 <!ELEMENT 元素名稱 使用規則>

* 元素的使用規則:
    ** 簡單元素
    - (#PCDATA)
    - EMPTY
    - ANY

    **複雜元素
    - (name,age,sex):按照順序出現
    - (name|age|sex): 只能出現其中的一個
    - name+:一次或者多次
    - name*:任意次數
    - name?:0次或者1次
* 屬性的使用規則
    格式:<!ATTLIST 元素名稱 
            屬性名稱 屬性類型  約束
        >
    ** 屬性類型
        - CDATA
        - ID:以字母和下劃線開頭
        - 枚舉:每次只能出現範圍中的一個
    ** 約束:
        - #REQUIRED
        - #IMPLIED
        - #FIXED "ABC"
        - 直接值 "aaa"
* 在xml中引入dtd(三種)
    1、使用內部dtd
    2、使用外部的dtd
    3、使用公共的dtd

* 定義實體
    格式: <!ENTITY 實體名稱 "實體內容">
    使用: &實體名稱;

* 解析xml 兩種方式 dom 和 sax
* jaxp解析xml dom方式
* jaxp是javase的一部分,是sun公司提供的解析器

2、jaxp使用sax方式解析xml
* sax方式解析的原理
- 採用事件驅動方式,邊讀邊解析
* 畫圖分析sax方式
* 需要兩部分:解析器和事件處理器

** 實現事件驅動器:繼承DefaultHandler類,重寫裏面的方法

* 使用sax方式獲取整個xml文檔
    使用第一個方法裏面的參數 qName(開始標籤名稱)
    使用第二個方法裏面 string構造
    使用第三個方法裏面 qName(結束的標籤名稱)

* 使用sax方式獲取的某個標籤的文本內容
    * 定義成員變量 flag = false
    ** 如果執行到想要獲取的標籤的時候,flag值ture
    ** 如果flag值是true時候,打印內容

    * 定義一個下標
    * 每次執行到結束標籤時候 下標加1

3、使用dom4j解析xml(***
* 是一個組織dom4j組織提供的,jdom的關係
* dom4j不是javase的一部分,如果想要使用,使用提供的jar包,把jar包放到項目中

* 如何把jar包加入到項目中,
- 創建文件夾,把jar包黏貼進去
- 右鍵點擊這個jar包,build path - add to build path
- jar圖標變成奶瓶的效果

4、使用dom4j查詢xml裏面的元素
* - element(QName qName) :獲取某一個元素(第一個)

- elements(QName qName) :獲取所有元素 name

- elements() :獲取p1下面的所有元素

5、使用dom4j添加元素(末尾添加)
* 在第一個p1下面添加女
/*
* 1、獲取dom4j的解析器
* 2、執行read方法,返回document
* 3、獲取根節點
*
* 4、獲取到第一個p1
* 5、在第一個p1下面添加 直接使用addElement添加sex
* 6、向sex裏面添加內容 setText(“女”);
*
* 7、回寫xml
//格式化操作
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(“src/person.xml”), format);
xmlWriter.write(document);
//關閉
xmlWriter.close();

6、使用dom4j在特定位置添加元素
* 在女之前添加 100
* /*
* 1、獲取dom4j的解析器
* 2、執行read方法,返回document
* 3、獲取根節點
*
* 4、獲取到第一個p1

     * 5、執行添加操作   elements():獲取p1下面的所有元素
     *  * 得到要添加的位置
     *  * 創建要添加的元素 
     *  * 在p1下面執行elements方法得到p1下面的所有元素 list
     *  * list裏面的  add(int index, E element)
        ***  創建要添加的元素  DocumentHelper類創建
     * 6、回寫xml
     * createPrettyPrint():表示格式化的方法
      createCompactFormat():表示壓縮的方法
     * */

7、使用dom4j修改元素
* 把女 修改男
* /*
* 1、獲取dom4j的解析器
* 2、執行read方法,返回document
* 3、獲取根節點
*
* 4、獲取p1
* 5、獲取p1下面的sex
* 6、完成修改操作 setText(“要修改的內容”)
* 7、回寫xml

     * */

8、使用dom4j刪除元素
* 刪除第一個p1下面的360310198901018910
* /*
* 1、獲取dom4j的解析器
* 2、執行read方法,返回document
* 3、獲取根節點
*
* 4、獲取到第一個p1
* 5、獲取p1下面的id
*
* 6、執行刪除操作
* 獲取父節點: getParent()方法獲取
* 通過父節點刪除 使用remove方法刪除
* 7、回寫xml
* */

9、使用dom4j獲取屬性
* 獲取屬性值 id=”itcast”
* /*
* 1、獲取dom4j的解析器
* 2、執行read方法,返回document
* 3、獲取根節點
*
* 4、獲取到p1 element方法
* 5、獲取p1上面的屬性值 attributeValue(“屬性名稱”)
*
* */

10、dom4j對XPath的支持
* xpath:一種書寫形式,使用xpath可以直接獲取xml中某個元素
* 要想使用xpath(要想dom4j對XPath的支持),必須先要引入xpath的jar包

* 用法:
    1、/AAA/DDD/BBB:按層進行獲取元素 
    2、//BBB:表示無論有多少層,只要名稱是BBB,都獲取到
    3、*:表示所有內容
    4、/AAA/BBB[1]:表示第一個BBB
     /AAA/BBB[last()]:表示最後一個BBB
    5、@id: 表示屬性名稱是id元素
     //BBB[@id] : 表示BBB元素上面有id屬性的
    6、 //BBB[@id='b1'] :表示BBB元素上面有id屬性,並且屬性值是b1

* 使用dom4j支持xpath來操作xml
    - selectNodes("xpath");
    - selectSingleNode("xpath");

* selectNodes("xpath");獲取xml中所有name元素的內容
    * /*
     * 1、獲取解析器
     * 2、執行read方法,返回document
     * 
     * 3、使用xpath獲取name元素 返回list結合
     * 4、遍歷list
     * 5、根據每次遍歷出來的name元素,獲取name的值
     * */
    * List<Node> list = document.selectNodes("//name");

* selectSingleNode("xpath");獲取第一個p1下面的name的內容
    * /*
     * 1、獲取解析器
     * 2、執行read方法,返回document
     * 
     * 3、使用xpath獲取第一個p1下面的name元素  //p1[@id]/name
     * 4、得到的name元素,獲取內容
     * 
     * */
    * Node name1 = document.selectSingleNode("//p1[@id]/name");

11、xml的約束值schema
* 之前學習了dtd,爲什麼還要學習schema?
* dtd和schema的比較
- dtd語法

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