當前位置:
首頁 > 知識 > XML、XML約束、XML解析、常用的xml解析器(DOM4J)、XPATH

XML、XML約束、XML解析、常用的xml解析器(DOM4J)、XPATH

XML的簡介

定義

HTML:超文本標記語言

XML:eXtensible Markup Language 可擴展標記語言 version="1.0"

  • 可擴展:所有的標籤都是自定義的。
  • 功能:數據存儲
  • 配置文件(最主要的使用場景)
  • 數據傳輸(一般不使用xml做數據傳輸,而使用json代替)

html與xml區別:

  • html語法鬆散,xml語法嚴格
  • html做頁面展示,xml做數據存儲
  • html所有標籤都是預先定義好的,xml所有標籤都是自定義的

xml語法

文檔聲明:

  • 必須寫在xml文檔的第一行。
  • 寫法:
  • <?xml version="1.0" ?>
  • 屬性:
  • version:版本號 固定值 1.0
  • encoding:指定文檔的碼錶。默認值為 iso-8859-1
  • standalone:指定文檔是否獨立 yes 或 no,是否受其他文件約束 ,
  • yes - 不受其他文件約束; no - 受其他文件約束
  • 跟約束文件相關的

元素:xml文檔中的標籤

  • 文檔中必須有且只能有一個根元素(根標籤)
  • 標籤需要正確閉合。 <student/> 或<name> </name>
  • 標籤需要正確嵌套
  • 標籤名稱要遵守:
  • 標籤名稱區分大小寫
  • 標籤名不能以數字開頭

文本:

  • 轉義字元:> &gt ; < &lt ;
  • CDATA : 中括弧內的數據會原樣顯示
  • <![CDATA[ 數據內容 ]]>

屬性:

  • 屬性值必須用引號引起來。單雙引號都可以

注釋:

<!-- -->

xml約束(了解):

定義

約束就是xml的書寫規則

約束的分類:

dtd(約束力度不夠,現在基本不使用):

dtd分類:
* 內部dtd:在xml內部定義dtd
* 外部dtd:在外部文件中定義dtd
* 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
* 網路dtd文件:<!DOCTYPE students PUBLIC "名稱空間" "student.dtd">
<!ELEMENT students (student*) > : 表示students標籤中可以有0-n個student標籤
<!ELEMENT student (name,age,sex)> : 表示student標籤中必須有name,age,sex並且順序要按這個來
<!ELEMENT student (name age sex)> : 表示student標籤中可以有name,age,sex
<!ELEMENT student (name|age|sex)> : 表示student標籤中只能有name,age,sex三個中的一個

schema(了解):

導入xsd約束文檔:
1、編寫根標籤
2、引入實例名稱空間 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3、引入名稱空間 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4、引入默認的名稱空間

XML解析(重點)

解析xml的目的

  • Java代碼讀取xml中的數據

    (最重要的)
  • 用Java代碼往xml中寫入數據 ( 幾乎用不到,只會出現在數據傳輸中,而數據傳輸基本不會使用xml 而使用 json )

xml的解析思路(了解)

DOM:將文檔載入進內存,形成一顆dom樹( document對象 ) ,將文檔的各個組成部分封裝為一些對象。

  • 優點:在內存中會形成dom樹,寫代碼就非常方便,可以對dom樹進行增刪改查。
  • 缺點:dom樹 非常占內存,解析速度慢。

SAX:逐行讀取,基於事件驅動

  • 優點:不佔內存,解析速度快
  • 缺點:只能讀取,不能回寫,而且使用不方便

常用的xml解析器

JAXP:sun公司提供的解析。支持dom和sax。(不常用)

JDOM(後來分裂了)

DOM4J(document for java 民間組織開發的,但是它是事實方式。非常好。 支持dom)

關鍵是獲取標籤,只要標籤獲取到了,那麼通過 attribute() 方法能獲取 屬性對象,通過 getText()方法能獲取標籤中的文本,通過 getName() 方法獲取標籤名

接下來的關鍵是:怎麼獲取標籤。有兩種方法: 迭代器, elements(), element (「標籤名」)

步驟:

  • 1.導入jar包 dom4j.jar
  • 2.創建解析器 SAXReader reader = new SAXReader();
  • 3.解析xml 獲得 document 對象 Document document = reader.read( url ); 獲取根節點 Element root = documen.getRootElement()

關於DOM4J解析的總結:

1.獲取標籤

1.1 迭代器(比較麻煩)

1.2 elements() 獲取所有子標籤 elements("標籤名") 獲取指定標籤名的子標籤

2.獲取文本

getText()

3.獲取屬性

attributes() 獲取所有屬性 獲取的是Attribute對象的集合

attribute("屬性名") 獲取對應屬性名的一個屬性 獲取的是 Attribute 對象

使用attribute對象獲取屬性值 : getValue()

XPATH(屬於DOM4J中的,用於查詢特定的節點)

  • 定義了一種規則。
  • 使用的方法:
  • selectSingleNode():
  • selectNodes():
  • 步驟:

  • 1、注意:導包: jaxen...jar
  • 2、

    創建解析器

    SAXReader reader = new SAXReader();
  • 3、解析xml

    獲得 document 對象

    Document document = reader.read(url);

XML、XML約束、XML解析、常用的xml解析器(DOM4J)、XPATH

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

http請求狀態碼
CSS3旋轉跳躍的立方體

TAG:程序員小新人學習 |