xml詳解小結

一 什么是XML

XML全稱為Extensible Markup Language,意思是可擴展的標記語言。XML語法上和HTML比較相似,但HTML中的元素是固定的,而XML的標簽是可以由用戶自定義的。
W3C在1998年2月發布1.0版本,2004年2月又發布1.1版本,但因為1.1版本不能向下兼容1.0版本,所以1.1沒有人用。同時,在2004年2月W3C又發布了1.0版本的第三版。我們要學習的還是1.0版本!!!

二 應用常見

  • 配置文件
  • 存放數據

存放數據栗子



    
        張三
    
    
        李四
    


配置文件栗子:



    
        HelloMyServlet
        cn.itcast.HelloMyServlet
    
    
        HelloMyServlet
        /hello
    


三 XML 語法

1 XML文檔聲明:

  1. 文檔聲明必須為結束;
  2. 文檔聲明必須從文檔的0行0列位置開始;
  3. 文檔聲明只有三個屬性:
  • versioin:指定XML文檔版本。必須屬性,因為我們不會選擇1.1,只會選擇1.0;
  • encoding:指定當前文檔的編碼。可選屬性,默認值是utf-8;
  • standalone:指定文檔獨立性。可選屬性,默認值為yes,表示當前文檔是獨立文檔。如果為no表示當前文檔不是獨立的文檔,會依賴外部文件。
2 元素

  1. 元素是XML文檔中最重要的組成部分,
  2. 普通元素的結構開始標簽、元素體、結束標簽組成。例如:大家好
  3. 元素體:元素體可以是元素,也可以是文本,例如:你好
  4. 空元素:空元素只有開始標簽,而沒有結束標簽,但元素必須自己閉合,例如:
  5. 元素命名:
    a) 區分大小寫
    b) 不能使用空格,不能使用冒號:
    c) 不建議以XML、xml、Xml開頭
  6. 良好的XML文檔,必須有一個根元素。
3屬性

  1. 屬性是元素的一部分,它必須出現在元素的開始標簽中
  2. 屬性的定義格式:屬性名=屬性值,其中屬性值必須使用單引或雙引
  3. 一個元素可以有0~N個屬性,但一個元素中不能出現同名屬性
  4. 屬性名不能使用空格、冒號等特殊字符,且必須以字母開頭
4 注釋

XML的注釋與HTML相同,即以“”結束。注釋內容會被XML解析器忽略!

5轉義字符

XML中的轉義字符與HTML一樣。
因為很多符號已經被XML文檔結構所使用,所以在元素體或屬性值中想使用這些符號就必須使用轉義字符,例如:“<”、“>”、“’”、“””、“&”。

6CDATA區

當大量的轉義字符出現在xml文檔中時,會使xml文檔的可讀性大幅度降低。這時如果使用CDATA段就會好一些。
在CDATA段中出現的“<”、“>”、“””、“’”、“&”,都無需使用轉義字符。這可以提高xml文檔的可讀性。
在CDATA段中不能包含“]]>”,即CDATA段的結束定界符。

四 xml的解析:

1開發中比較常見的解析方式有三種:
  • DOM:要求解析器把整個XML文檔裝載到內存,并解析成一個Document對象。
    a) 優點:元素與元素之間保留結構關系,故可以進行增刪改查操作。
    b) 缺點:XML文檔過大,可能出現內存溢出顯現。
  • SAX:是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。并以事件驅動的方式進行具體解析,每執行一行,都將觸發對應的事件。(了解)
    a) 優點:處理速度快,可以處理大文件
    b) 缺點:只能讀,逐行后將釋放資源。
  • PULL:Android內置的XML解析方式,類似SAX。(了解)
2 解析器:

就是根據不同的解析方式提供的具體實現。有的解析器操作過于繁瑣,為了方便開發人員,有提供易于操作的解析開發包。

3 常見的解析開發包:
  • JAXP:sun公司提供支持DOM和SAX開發包
  • JDom:dom4j兄弟
  • jsoup:一種處理HTML特定解析開發包
  • dom4j:比較常用的解析開發包,hibernate底層采用。
4 DOM解析原理及結構模型

XML DOM 和 HTML DOM類似,XML DOM 將 整個XML文檔加載到內存,生成一個DOM樹,并獲得一個Document對象,通過Document對象就可以對DOM進行操作


xml詳解小結_第1張圖片
image.png

xml詳解小結_第2張圖片
image.png
DOM中的核心概念就是節點,在XML文檔中的元素、屬性、文本等,在DOM中都是節點!
5 dom4j技術栗子

package xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/**
 * Create by SunnyDay on 2018/11/13
 * 使用 dom4j 解析xml
 * 

* 使用步驟: * 1.導入jar包 * 2.創建一個核心對象 SAXReader * new SAXReader(); * 3.將xml文檔加載到內存中形成一棵樹 * Document doc=reader.read(文件) * 4.獲取根節點 * Element root=doc.getRootElement(); * 5.通過根節點就可以獲取其他節點(文本節點,屬性節點,元素節點) * 獲取所有的子元素 * List list=root.elements() * 獲取元素的指定屬性內容 * String value=root.attributeValue("屬性名"); * 獲取子標簽標簽體:遍歷list 獲取到每一個子元素 */ public class Dome4jDemo { public static void main(String[] args) throws DocumentException { // 1 創建核心對象(new 方式) SAXReader saxReader = new SAXReader(); //2 加載xml文檔 獲得dom樹(核心對象調用read讀取xml文件) Document doc = saxReader.read("C:\\CodeSoftWare\\JetBrainsIntelliJ_IDEA_2018.2.5\\workPlace\\Jdbc\\src\\xml\\web.xml"); //3 獲得根元素(文檔對象下面就是根元素 參考上圖解) Element root = doc.getRootElement(); //4 獲得子元素(根節點下所有子元素) List list = root.elements(); for (Element e:list) { // elementText("標簽名") 獲得指定名稱元素的文本值 (指定標簽的文本值) // getName() 獲得當前元素名 System.out.println(e .elementText("servlet")); System.out.println(e .getName()); } } }

五xml的約束

xml約束:
1 作用:

規定xml中可以出現那些元素及那些屬性,以及他們出現的順序.

2 約束的分類:
  • DTD約束:struts hiebernate等等(會用到)
  • SCHEMA約束:tomcat spring等等(會用到)
3 約束詳解

既然是約束就和xml有聯系,所以約束要和xml關聯,xml的相關限制才才生效。

和xml的關聯 (一般都會提供好,復制過來即可,有時候連復制都不需要.)
方式1:內部關聯
        格式:
            
方式2:外部關聯-系統關聯
        格式:
            
        例如:
            

如下圖:


tigon

如上圖: 我們把提供好的.dtd文件靠拷貝過來,我們再建立個xml文件

打開dtd文件拷貝格式到dtd xml中就行了


xml詳解小結_第3張圖片
image.png
接下來xml中只能出現dtd文件中規定的特有的標簽了(不能自定義自己隨便寫了)

ps:idea中你輸入< 便會提示能夠輸入的標簽

方式3:外部關聯-公共關聯
        格式:
            
4 dtd的語法(了解)

無論是單獨的dtd文件還是寫在xml中(參考上面方式一)都需要按照語法要求寫.

再次強調下語dtd文件約束的作用:
規定xml中可以出現那些元素及那些屬性,以及他們出現的順序.
4.1 語法:
標簽(元素)語法:


數據類型:#PCDATA:普通文本 使用的時候一般用()引起來

功能:能出現那些標簽,以及出現順序

包含內容:該元素下可以出現那些元素 用()引起來

符號:
            *   出現任意次
            ?   出現1次或者0次
            +   出現至少1次
            |   或者
            ()  分組
            ,   順序(元素出現先后順序,按照都好標記順序出現)

栗子如下:(上圖約束圖中的代碼)



ps:元素名就是xml中能夠出現的元素標簽名
屬相的約束語法:
                
    屬性:
        格式:
            
        屬性類型:
            ID:唯一
            CDATA:普通文本
        屬性是否必須出現
            REQUIRED:必須出現
            IMPLIED:可以不出現


例如:

注意:一個xml文檔中只能添加一個DTD約束

5 schema約束:
一個xml文檔中可以添加多個schema約束
xml和schema的關聯.
        格式:
            <根標簽 xmlns="..." ...>
            <根標簽 xmlns:別名="..." ...>
    名稱空間:
        關聯約束文件
        規定元素是來源于那個約束文件的
    例如:
        一個約束文件中規定 table(表格)  表格有屬性 row和col
        還有一個約束文件規定 table(桌子) 桌子有屬性 width和height
        
        在同一個xml中萬一我把兩個約束文件都導入了,
            在xml中我寫一個table,這個table有什么屬性????
        我們為了避免這種情況的發生,可以給其中的一個約束起個別名
        使用的時候若是沒有加別名那就代表是來自于沒有別名的約束文件
            例如 table(表格) 給他起個別名  xmlns:a="..."
            在案例中使用 a:table 代表的是表格
            若在案例中直接使用 table 代表的是桌子
        
     ps:在一個xml文件中只能有一個不起別名;
注意:
    schema約束本身也是xml文件.

如下一個xml scheam的約束文檔,我們創建xml時如果有相應的約束 直接引進約束就行。




    
    
        
            
                
                    
                        
                            
                            
                        
                    
                
                
                    
                        
                            
                            
                        
                    
                
                
                    
                        
                            
                        
                    
                
            
            
        
    

xml詳解小結_第4張圖片
image.png

如上圖 的紅圈處的代碼,我們建立xml文檔 把這些約束考進來就行了(這只是一個例子參考),里面能夠出現的標簽就確定了。

解釋:


xml詳解小結_第5張圖片
image.png
xml詳解小結_第6張圖片
image.png

你可能感興趣的

广东25选5开奖结果