XML的簡單認識
一、初識XML
1.1 XML和HTML的對比
1.1.1 用途方面
XML主要用於資料儲存、傳輸、配置檔案;HTML主要用於頁面展示。
(一開始XML想替換HTML,後來失敗了就轉資料儲存應用了。)
1.1.2 標籤擴充套件性方面
Extensible Markup Language:可擴充套件標記語言
- XML可擴充套件:標籤不用提前定義,可以自行定義,只要符合規範即可
- HTML不可擴充套件:標籤都是定義好的
1.2 HTML和XML的關係?
HTML和XML都是w3c公司的產品。
- w3c:全球資訊網聯盟,制定各種網路標準,比如js、html、css都是他們制定的。
- html先出現在市場,但是各個廠商版本的瀏覽器為了展示自己功能的強大,有些就不遵循html的標準,當然也能實現頁面的正常展示。例子如下:
<html>
<head></head>
<body>
<font color="red">這是font</font>
</body>
</html>
<font color="red">這是font</font>
上述二者皆可正常展示。
XML語法非常嚴格,必須遵循規範,否則解析不出來。結果發現沒人用,因為習慣用HTML,二者語法功能也一樣,相比XML語法更嚴格,所以就沒人用。XML退出幕後,常用於資料儲存,在java中用作配置檔案也比較多。
Java中properties 配置檔案舉例:
.properties(扁平)
姓名:張三
年齡:18
性別:男
Xml配置檔案有層次,所以用作配置檔案很合適
<人>
<姓名>張三</姓名>
……
</人>
二、XML的作用
2.1 儲存(資料庫)
<students> <student> <name>as</name> <age>12</age> </student> <student> <name>as</name> <age>12</age> </student> <student> <name>as</name> <age>12</age> </student> </students>
利用XML解析工具可以對上面的檔案進行增刪改查的操作
2.2 資料傳輸
XML可以作為兩個系統之間傳輸資訊的載體
一個由C語言寫的系統,一個由Java語言寫的系統,二者之間進行資料交流需要雙方都認可的資料格式才行,這種需要提前約定好XML格式。不同系統之間怎麼約定XML的資料格式?可以用xml的約束來規定,約束需要提前約定,具體約束方式後面會有。
2.3 配置檔案
所有的應用幾乎都有配置檔案,配置檔案是用來定義應用的一些屬性資訊的。例如qq、微信,應用的開啟介面和尺寸都是提前規定好的,可以把這些資訊寫在程式中(把程式寫死了,程式和配置耦合到一起了),也可以把這些配置資訊寫在配置檔案中,在啟動程式的時候讀取這些配置檔案即可(程式和配置分開了,程式變得更靈活)。
<config>
<color>red</color>
</config>
三、xml檔案的書寫要求
1、 xml的檔案字尾是.xml
2、 xml的第一行必須定義為文件宣告
3、 xml文件中有且僅有一個根標籤
4、 屬性值必須使用引號(單雙都行)引起來
5、 標籤必須正確關閉
6、 xml的標籤名稱區分大小寫
<?xml version="1.0"?>
<students>
<student>
<name>as</name>
<age>18</age>
<gender value="female"/>
<sex>female</sex>
</student>
</students>
四、xml的組成部分
4.1 文件宣告
格式:
屬性列表:
version:版本號,必須的屬性,只有兩個1.0或者1.1,1.1版本不相容1.0的,所以用的很少。
encoding:預設是iso-8859-1,告訴瀏覽器以這個編碼去解析,但是這個編碼不包含中文。注意:這個地方的值要和儲存檔案的時候的編碼值保持一致。
Standalone:是否獨立。值:yes或no,就是說當前檔案是否需要依賴外部檔案。經過實踐發現,無論什麼值,都可依賴外部檔案,寫不寫都沒用。
4.2 指令
控制xml去做什麼事情,(瞭解,用的很少)
例如:指揮瀏覽器怎麼解析當前xml檔案:
當前路徑提前建立sytle.css樣式檔案
name{
color:red;
}
4.3 標籤
標籤名稱自定義
規則:
- 名稱可以包含字母、數字以及其他的字元
- 名稱不能以數字或者標點符號開始
- 名稱不能以字母xml(或者XML、Xml等等)開始
- 名稱不能包含空格
4.4 屬性
id屬性值唯一,id是唯一標識值
4.5文字
CDATA區:在該區域中的資料會被原樣展示
格式: <![CDATA[ 資料 ]]>
<![CDATA[內容]]>
五、Xml的DTD約束和Schema約束
5.1 什麼是約束
規定xml文件的書寫規則。
5.2 為什麼xml需要約束
舉例:A系統用c語言寫的,B系統用java語言寫的,系統之間進行資料交流,就可以用xml進行交流,但是不能隨意定義標籤,需要提前規定xml的資料樣式和資料規則,標籤代表什麼含義等。
<content>
<message>你好</message>
<data>today</data>
</content>
5.3 約束的種類
- DTD:一種簡單的約束技術(Document Type Definition),比較簡單。
- Schema(大綱):一種複雜的約束技術。
約束在開發中的應用場景:
框架(booststrap)(半成品的軟體/專案)+需要很多的配置(xml檔案)+由開發者進行配置,配置檔案不能亂配置,要按照框架給出的約束去配置。
5.3.1 XML的DTD約束
DTD的三種引入方式:
- 內部dtd:將約束規則定義在xml文件中
- 本地dtd:
- 網路dtd:
方式一:內部dtd
方式二:本地dtd
方式三:網路dtd
5.3.2 XML的schema約束
Schema約束檔案的字尾名是xsd,本質上還是個xml檔案。
XSD內部檔案的格式:
XML約束檔案的引用格式:
六、XML檔案的解析
6.1 什麼叫xml的解析
指的就是操作XML文件,將文件中的資料讀取到記憶體中,或者是把記憶體中的資料寫到xml檔案中去。
- 解析(讀取):將文件中的資料讀取到記憶體中
- 將記憶體中的資料儲存到xml文件中,持久化的儲存
6.2 解析xml的兩種思想
6.2.1 DOM(Document Object Model)
將標記語言文件一次性載入進記憶體,在記憶體中形成一顆dom樹。
- 優點:操作方便,可以對文件進行CURD的所有操作
- 缺點:佔記憶體
6.2.2 SAM(Simple API for XML)
SAM:逐行讀取,基於事件驅動的。
逐行讀取(逐個元素讀取):讀到下一行的內容的時候,把上一行的內容丟掉,在記憶體中永遠只有一行資料。
事件驅動:讀到根標籤要作什麼,讀到屬性節點要做什麼,讀到文字標籤要做什麼,讀到結束標籤要做什麼,程式碼要自己寫,所以比較複雜。
- 優點:不佔記憶體
- 缺點:只能讀取,不能增刪改
6.3 Xml常見的解析器
- JAXP:sun公司提供的解析器,支援dom和sam兩種思想。不需要匯入第三方jar包,因為JAXP就是sun公司的產品,已經在jdk中了。但是沒人用,因為效率低。
- DOM4J:一款非常優秀的解析器(dom+sam),市面上用的也比較多。
- Jsoup:簡單高效,jsoup是一款JAVA的HTML解析器,可直接解析某個URL地址,HTML文字內容。它提供了一套非常省力的API,可通過DOM,css以及類似jQuery的操作方法來取出和操作資料。
- PULL:Android作業系統內建的解析器,sam方式的。手機記憶體小,所以就是sam方式,但是在伺服器端一般就採用dom解析方式。