xml學習筆記

一、XML入門

HTML:負責網頁的結構

CSS:負責網頁的樣式(美觀)

JavaScript:負責在瀏覽器端與用戶進行交互

HTML語言特點:(1)由標籤組成;(2)語法結構鬆散,不區分大小寫,結束標籤和開始標籤不一定匹配。

HTML與XML的區別:

(1)      HTML(HyperTextMarkup Language)超文本標記語言,由標籤組成,標籤是由w3c組織制定,固定的;作用是負責網頁結構的。

(2)      XML(ExtendMarkup language)可擴展標籤語言,標籤由開發者按照一定的語法定義自己制定的,作用是描述帶關係的數據(作爲軟件的配置文件)和作爲數據的載體(存儲數據,小型的”數據庫”)

二、XML語法:

xml文件以xml後綴名結尾。

xml文件需要使用xml解析器去解析。瀏覽器內置了xml解析器

三、標籤

3.1語法:

<student></student>開始標籤 標籤體內容 結束標籤

    (1)<student/>或<student><student/>空標籤。沒有標籤體內容

    (2)xml標籤名稱區分大小寫

    (3)xml標籤一定要正確配對

    (4)xml標籤名中間不能使用空格

    (5)xml標籤名不能以數字開頭

    (6)注意:在一個xml文檔中,有且僅有一個根標籤

3.2屬性

     語法:<Studentname=”eric”>student</Student>

注意:

(1)    屬性值必須以引號包含,不能省略,也不能單雙引號混用!!!

(2)    一個標籤內可以有多個屬性,但不能出現重複的屬性名!!!

   3.3註釋

語法:<!--註釋的內容 -->

   3.4文檔聲明

語法:<?xmlversion=”1.0” encoding=”utf-8”?>

version:xml的版本號

encoding:解析xml文件時查詢的碼錶(解碼過程時查詢的碼錶)

注意:

如果在ecplise工具中開發xml文件,保存xml文件時自動按照文檔聲明的encoding來保存文檔

  3.5轉義字符

在xml中內置了一些特殊字符,這些特殊字符不能直接被瀏覽器原樣輸出。如果希望把這些特殊字符按照原樣輸出到瀏覽器,對這些特殊字符進行轉義。轉義之後的字符就叫轉義字符

特殊字符                   轉義字符

<                                   &lt;

>                   &gt;

“                                   &quot;

&                                  &amp;

空格                            &nbsp;

3.6 CDATA塊

  作用:可以讓一些需要進行包含特殊字符的內容統一進行原樣輸出

  <![CDATA[

              <html><head>head</head><body>body</body></html>

     ]]>

3.7處理指令

  作用:告訴xml解析器如何解析xml文檔

  案例:<?xml-stylesheettype=”text/css” href=”1.css”?>告訴xml解析器該xml文檔引用了哪個css文件

需要提取xml內容可以使用xml-stylesheet指令

四、xml解析

4.1 引入

xml文件除了給開發者看,更多的情況是程序讀取xml文件的內容。這叫做xml解析

4.2 xml解析方式(原理不同)

         DOM解析

         SAX解析

4.3 xml解析工具

         DOM解析原理:

                   (1)JAXP              (oracle-Sun公司官方)

                   (2)JDOM工具(非官方)

                   (3)Dom4J工具(非官方)

                            三大框架(默認讀取xml的工具就是Dom4J)

         SAX解析原理:

(1)    SAX解析工具(oracle-Sun公司官方)

/*

BOM(瀏覽器對象編程)

DOM(文檔對象編程)JavaScript引擎把html文件中標籤封裝成各種對象

*/

xml解析器在解析xml文檔時,把xml文件的各個部分內容封裝成對象,通過這些對象操作xml文檔,這種做法叫做DOM解析(DOM編程)

Dom解析:

         Document對象,代表一個完整的xml文檔

         通過Document對象可以得到其下面的其他節點對象,通過節點對象訪問xml文檔的內容。(標籤,屬性,文本,註釋…)

4.4什麼是DOM解析

         DOM解析原理:xml解析器一次性把整個xml文檔加載進內存,然後在內存中構建一棵Document的對象樹,通過Document對象,得到樹上的節點對象,通過節點對象訪問(操作)到xml文檔的內容

4.5 Dom4J工具

         非官方,不在JDK內

         使用步驟:

(1)      導入dom4j的核心包 dom4j-1.6.1.jar

(2)      編寫Dom4J讀取xml文件代碼


	public static void main(String[] args) {
		try {
			//1、創建一個xml解析器對象
			SAXReader reader = new SAXReader();
			//2、讀取xml文檔,返回Document對象
			Document document = reader.read(new File("./src/contact.xml"));
			System.out.println(document);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

4.6Dom4j讀取xml文件

         節點:

     Iterator  Element.nodeIterator();              //獲取當前標籤節點下的所有子節點

         標籤:

           Element Document.getRootElement();       //獲取xml文檔的根標籤

                   Element   Element.element(“標籤名”);//指定名稱的第一個子標籤

                    Iterator<Element>Element.elementIterator(“標籤名”);//指定名稱的所有子標籤

                      List<Element> Element.elements();//獲取所有的子標籤

         屬性:

           String Element.attributeValue(“屬性名”);//獲取指定名稱的屬性值

           Attribute Element.attribute(“屬性名”);//獲取指定名稱的屬性對象

                         Attribute.getName();//獲取屬性名稱

                            Attribute.getValue();//獲取屬性值

                   List<Attribute>Element.attributes();//獲取所有屬性對象

                   Iterator<Attribute>  Element.attributeIterator();//獲取所有屬性對象

         文本:

           Element.getText();//獲取當前標籤的文本

           Element.elementText(“標籤名”);//獲取當前標籤的指定名稱的子標籤的文本內容

五、總結:

5.1 xml作用

a)        作爲軟件配置文件(最常見)

b)        作爲小型的”數據庫”

5.2  xml語法(由w3c組織規定的)

標籤:

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

屬性:

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

文檔聲明:

  <?xmlversion=”1.0” encoding=”utf-8”?>

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

注意:

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

5.3 xml解析(DOM解析)

程序讀取或操作xml文檔

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

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

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

  讀取xml文檔:

    Document doc =new SAXReader().read(“xml文檔”);

  節點:

nodeIterator();          //所有節點

         標籤:

           Element(“名稱”);              //指定名稱的第一個子標籤對象

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

                            elements();                         //所有子標籤對象

                     屬性:

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

                            attribute(“名稱”);                      //指定名稱的屬性對象

                                     getName()                          //屬性名稱

                                     getValue()                           //屬性值

                            attributeIterator()                     //所有屬性對象(Iterator)

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

                     文本:

                            getText()                                       //得到文本

                            elementText(“子標籤名稱”) //得到字標籤的文本

day0709

六、Dom4j修改xml文檔

    XMLWriterwriter = new XMLWriter(OutputStream,OutputFormat);

  Writer.write(Document);

6.1修改xml文檔的API

     增加:

DocumentHelper.createDocument();                 //增加文檔

addElement(“名稱”);                                              //增加標籤

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

    修改:

Attribute.setValue(“值”);                                //修改屬性值

Element.addAttribute(“同名的屬性名”,”值”);//修改同名的屬性值

Element.setText(“內容”);                               //修改文本內容

    刪除:

Element.detach();                           //刪除標籤

Attribute.detach();                           //刪除屬性

 

七、xPath技術

7.1引入:

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

7.2 xPath作用

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

7.3在dom4j中如何使用xPath技術

(1)導如xPath支持jar包。Jaxen-1.1-beta-6.jar

(2)使用xPath方法

List<Node> selectNodes(“xPath的表達式”);                      //查詢多個節點對象

Node    selectSingleNode(“xPath的表達式”);                       //查詢一個節點對象

7.3 xPath語法

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

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

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

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

   @                          屬性                   表示選擇屬性節點

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

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

案例:

  用戶登錄功能:

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

  有:則表示登錄成功

  沒有:則表示登錄失敗

  用xml當做數據庫

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

八、SAX解析

   8.1 引入

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

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

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

8.2 SAX解析工具:

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

       核心的API:

SAXParse類:用於讀取和解析xml文件

     parse(Filef,DefaultHandler dh);//方法,解析xml文件

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

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

      DefaultHandler類的API:

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

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

void startElement(String uri,String localName,StringqName,Attributes attributes)  :  讀到開始標籤時調用。

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

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

DOM解析    VS    SAX解析

區別一:

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

SAX解析原理:加載一點,讀取一點,處理一旦,適合大容量文檔的讀取

區別二:
DOM解析可以任意進行增刪改查

SAX解析只能讀取

區別三:

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

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

區別四:

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

SAX解析基於事件的編程方法。Java開發者比較難理解

 

九、總結:

9.1 Dom4j修改xml文檔

寫出xml文檔

XMLWriter writer = new XMLWriter();

Writer.write(doc); //寫出xml文檔

      增加:

       DocumentHelper.createDocument();               //增加新文檔

             Element.addElement(“name”);                          //增加子標籤

       Element.addAttribute(“name”,”value”)           //增加屬性

      修改:

       Attribute.setValue(“value”);                               //修改屬性值

             Element.setText(“value”);                                            //修改文本內容

           刪除:

             Element.detach();                                                  //刪除標籤

             Attribute.detach();                                                //刪除屬性

9.2  xPath技術:快速找到xml(標籤,屬性,文本)

dom4j使用xpath:

    List<node>list = Element.selectNodes(“xpath表達式”);   //多個節點對象

    Nodenode = Element.selectSingleNode(“xpath表達式”); //一個節點對象

9.3 xpath表達式語言

   /                                      表示根位置或者 子標籤

   //                                    表示後代標籤(部分層次結構)

   *                表示所有元素

   []                表示條件

   @                表示選擇屬性

   text()             表示選擇文本

   and              表示與條件

9.3  SAX解析:原理:加載一點,解析一旦,處理一點,對內存要求不高(基於事件)

SAXParser類:

  parser(Filefile,DefaultHandler handler): 該方法使用SAX解析方式去解析xml文檔

DefaultHandler類:重寫該類中的一些方法,用於處理xml文檔

  startElement(…String qName);    //讀到開始標籤時調用

characters(char[] ch, int start,intlength);    讀到文本內容時調用(包括空格和換行)

  endElement(….String qName);    //讀到結束標籤時調用

十、xml約束

    xml約束要求:大家能夠看懂約束內容,根據約束內容寫出符合規則的xml文件

xml語法:規範的xml文件的基本編寫規則(由w3c組織制定的)

xml約束:規範xml文件數據內容格式的編寫規則(由開發者自行定義)

10.1 xml約束技術:

    DTD約束:語法相對簡單,功能相對簡單。學習成本低

    Schema約束:語法相對複雜,功能也相對強大。學習成本相對高。(語法空間)

10.2 DTD約束:

導入dtd方式

內部導入

<!DOCTYPE note [

    <!ELEMENTnote (to,from,heading,body)>

    <!ELEMENT to        (#PCDATA)>

  <!ELEMENT from      (#PCDATA)>
        <!ELEMENT heading    (#PCDATA)>

    <!ELEMENTbody      (#PCDATA)>

]> 

外部導入

   本地文件系統:

     <!DOCTYPE note SYSTEM “note.dtd”>

   公共的外部導入:

     <!DOCTYPE 根元素 PBULIC http://gz.itcast.cn/itcast.dtd>

DTD語法

  約束標籤

    <!ELEMENT 元素名稱 類別> 或 <!ELEMENT元素名稱 (元素內容)>

  類別:

    空標籤:EMPTY 表示元素一定是空標籤

    普通字符串:(#PCDATA)。表示元素的內容一定是普通字符串(不能含有子標籤)

    任何內容:ANY。 表示元素的內容可以是任意內容

  (元素內容):

    順序問題:

      <!ELEMENT 元素名稱(子元素名稱1,子元素名稱2,……)> :按順序出現子標籤

    次數問題:

      標籤:必須且只出現1次

      標籤+:至少出現一次

      標籤*:0或n次

      標籤?:0或1次

  約束屬性

    <!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>

      默認值:

#REQUIRED        屬性是必需的

        #IMPLIED          屬性不是必需的

        #FIXEDvalue       屬性不是必需的,但屬性值是固定的

      屬性類型:控制屬性值

        CDATA :表示普通的字符串

        (en1|en2|…):表示一定是任選其中的一個值

        ID:  表示在一個xml文檔中該屬性值必須唯一,值不能以數字開頭

  10.3 XML Schema 也是一種用於定義和描述xml文檔結構與內容的模式語言,其出現是爲了克服DTD的侷限性

     名稱空間:告訴xml文檔的哪個元素被哪個schema文檔約束。在一個xml文檔中,不同的標籤可以受到不同schema文檔約束

1、  一個名稱空間受到schema文檔約束的情況

2、  多個名稱空間受到多個schema文檔約束的情況

3、  默認名稱空間的情況

4、  沒有名稱空間的情況


 

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