天天看點

XML

XML

一概述

eXtensible  Markup  Language,不以預先定義的一組資料結構為前提,用作應用程式間資料交換的載體。XML沒有規定固定的标簽與固定的結構,使用者可以自定義,可擴充性強,這一點不同于HTML語言,HTML規定了可使用的标簽以及标簽之間的關系,擴充性差。

使用XML語言編寫的文檔主要用作應用程式間資料交換的載體,一個應用程式将傳遞給另一個應用程式的資料以XML語言編寫,接收一方的應用程式根據XML語言的規則讀取。

⑴序言:XML聲明、處理指令與注釋。

①文檔元素一般指文檔标簽。

②XML文檔元素以樹形分層結構排列。

③XML文檔中隻能有一個頂層元素,這個頂層元素叫做根元素。

④文檔元素必須有起始标記與結束标記,兩種形式:<tagName>xxxxx</tagName與<tagName xxxx/>。

元素屬性依附于元素,必須通過元素調用,隻能出現在起始标簽中,其值用單引号或者雙引号括起來。

注釋格式:<!--xxxx-->

一種流行的讀寫XML文檔的開源元件,導入架包就可使用。

二特殊字元的處理

一些字元是标簽的一部分,當出現在元素内容中時會被XML文檔解析器視作标簽而不是普通字元,這是就會出錯誤,為了避免這種情況的出現,使用一些特殊方式來處理這些歧義字元。

用其他字元替換歧義字元。

                   歧義字元           用作替換的字元

                         <                     <

                         >                     >

                         &                     &

                          '                     &apos

                         "                      &quot

①一種标記法,在可能出現歧義的字元前放一個标記,當系統接觸到标記,就按照預先定義的處理方式把标記中的字元當做普通字元。

②文法格式:<![CDATA[content]]>。

③在XML中使用正規表達式必須使用CDATA字段。

三幾個重要類

1.                                                  Node(Interface)

                                                          | 

                                                          |

         |----------------------------------------------------------------------------|

         |                                                |                                                    |

    Branch(Interface)                 Comment(Interface)                            Attribute(Interface)

         |

    Element(Interface)

用來将建立的XML文檔輸出到文檔中,一個裝飾類,裝飾了Writer或者OutputStream。

⑴如果裝飾了字元流,為了防止輸出到文檔中的中文出現亂碼,編碼方式必須設為GBK。

⑵如果裝飾了位元組流,為了防止輸出到文檔中的中文出現亂碼,編碼方式必須可設為UTF-8。

XML文檔對象建立類,基于硬碟上的文檔建立封裝了文檔全部資訊的對象。

四建立XML文檔

使用文檔對象建立的節點即為根節點:

⑴element.setText(content):添加普通内容。

⑵element.addCDATA(content):添加CDATA字段。

預設情況下,XML文檔采用緊湊方式排版,閱讀不友善,可以将輸出格式改為縮進方式:

⑴未設定輸出樣式時輸出:

⑵設定了輸出樣式時輸出:

⑶輸出到頁面:

⑷輸出到控制台:

五解析文檔

DOM4J:一次性将檔案讀取到記憶體,讀取速度快,用于讀取較小的檔案,不适宜讀取較大的檔案。

SAX:邊讀邊解析,适用于讀取較大的檔案。

子節點指定的是一級目錄下的節點,不包括二級目錄及以下目錄中的節點。

⑴root.element(name):擷取具有指定名稱的節點,如果文檔中包含多個,則傳回第一個。

⑵root.elements(name):以List集合傳回具有指定名稱的全部節點。

XPath是一種根據路徑擷取xml文檔節點的語言。

基本文法格式:selectNode(String xpath)/selectSingleNode(String xpath)。

nodeName:擷取具有指定名稱的全部子節點。

/root/xxxx:以相對于根節點的路徑擷取節點。

xxxx/xxxx:以相對于操作對象的路徑擷取節點。

//nodeName:不受路徑限制,擷取文檔中指定名稱的全部節點。

A//nodeName:擷取A節點下具有指定名稱的全部後代節點。

A/nodeName[1]:擷取子節中的第一個節點。

A/nodeName[last()]:擷取子節點中最後一個節點。

//nodeName[@attr]:不受路徑限制,擷取文檔中具有指定名稱與指定屬性的全部節點。

//nodeName[@attr=‘xxx’]:不受路徑限制,擷取文檔中具有指定名稱與指定屬性值的全部節點。

//nodeName[@attr+關系運算符xxxxx]:不受路徑限制,擷取文檔中具有指定名稱、同時滿足關系運算的全部節點。

首先擷取疊代器Iterator,該疊代器包含了具有指定名稱的全部子節點:

⑴删除單個節點:

①parentNode.remove(subNode):由父節點删除。

②element.detach():自己删除自己。

⑵删除具有指定名稱的全部節點:parentNode.elements(name).clear();

element.setName("newName"),修改節點名稱。

⑴Attribute  attr=element.attribute(String name):擷取指定名稱的屬性。

⑵Attribute  attr=element.attribute(int index):擷取指定索引的屬性,index從0開始。

⑶String  value=attr.getValue():擷取屬性值。

⑷String  value=element.attributeValue(name):直接根據屬性名擷取屬性值。

⑸List<Node> attributes = doc.selectNodes("//@count"):不受路徑限制,擷取文檔中具有指定名稱的全部屬性。

⑴attr.detach():自己删除自己。

⑵element.remove(attr):通過節點删除屬性。

⑴節點的内容指的是起始标簽之間未被其他标簽包含的文本,包含空格,是以才有了去除空格的方法getTextTrim。

⑵element.getText():擷取内容,未删除前後可能存在的空格。

⑶element.getTextTrim():擷取删除前後空格的内容。

繼續閱讀