【8】Dom4j和XPath

Dom4j

一、概述

1.功能

優秀的Java XML API,用來處理XML數據

2. 搭建Dom4j環境

導入dom4j-1.6.1.jar包

二、使用Dom4j

1.讀取XML文件

  • 調用SAXreader的read方法獲取Document對象
  • 調用Document對象的getRootElement方法獲取根標籤
  • 調用Element的getName獲取標籤名,getText獲取標籤文本

2.Element的獲取方法

  • 子標籤相關

    • element();element(“標籤名”); ——>找到第一個符合的子標籤

    • elements();elements(“標籤名”); ——>找到符合的所有子標籤List

    • elementIterator(); ——>獲取所子標籤性Iterator

    • elementText(“標籤名”); ——>獲取子標籤文本

    • elementTextTrim(“標籤名”); ——>獲取去除所有空白的子標籤文本

  • 屬性相關

    • attribute(“屬性名”); ——>獲取屬性
    • attributes(); ——>獲取所有屬性List
    • attributeIterator(); ——>獲取所有屬性Iterator
    • attributeValue(“屬性名”); ——>獲取屬性值

三、使用XPath查找節點

1.概述

  • 功能:快速定位到XML中的節點
  • 導入jaxen-1.1-beta-6.jar包

2.使用

調用Document的方法

  • selectNodes(“定位用XPath表達式”,[排序用XPath表達式]) ——>返回List;
  • selectSingleNode(“定位用XPath表達式”) ——>返回Node;

3.XPath語法

  • 絕對路徑查找

    • 以”/”開頭,”/”代表Document對象
  • 相對路徑查找

    • 以”.”代表當前節點,”..”代表當前節點的父節點
    • 在哪個節點對象上執行XPath,當前節點就是哪個節點
  • 全文搜索

    • 以”//”開頭,通配前面的任意個節點
  • 屬性節點前要加”@”

  • 謂語(附加條件)

    • 在節點後附加[謂語]
    • 允許寫函數調用last()、count(節點)
    • 允許比較運算符
    • 允許and、or
    • 數字代表位置,從1開始

4.構建Document

  • DocumentHelper靜態類[調用DocumentFactory.getInstance()]

    • createDocument(Element/空) ——>創建Document對象
    • createElement(QName/String) ——>創建Element對象
    • createAttribute(Element, QName, String) ——>創建Attribute對象
  • Element的添加方法[底層用DocumentFactory,雙鏈表樹]

    • add([int],Element)
    • addElement(String).setText(String)
    • addAttribute(String,String)
    • add(Attribute).setValue(String)
  • Element的刪除方法

    • 調用父節點的remove(Node) ——>移除Element或Attribute
    • 調用自身的detach() ——>分離Element

5.Document輸出爲XML文件

  • XMLWriter

    • 創建XMLWriter對象
    • 傳入一個流對象和輸出編碼(OutputFormat)
      • OutputStream ——>根據OutputFormat轉換爲BufferedWriter
      • FileWriter ——>當本地編碼是UTF-8時纔不會亂碼,否則需要轉換流
    • 調用XMLWriter的writer(Docuement)方法輸出文件
    • 調用XMLWriter的close()方法關閉流
  • OutputFormat——>指定輸出編碼和文檔聲明的encoding

    • OutputFormat靜態方法

      • createCompactFormat()壓縮格式,無多餘空白,方便網絡傳輸
      • createPrettyPrint()漂亮格式,包含空白,方便查閱
    • setEncoding(String) ——>設置輸出編碼

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