什么是xml?
xml指可擴展標記語言。
xml被設計用來存儲數據,不顯示數據。
XML 需要自行定義標簽,且標簽名稱具有自我描述性。
XML 是 W3C 推薦的數據傳輸存放標准。
XML數據格式主要的用途又有哪些?
程序之間的數據傳輸通訊 程序之間的數據傳輸通訊
PHP語言 <- 快遞100 <- Java語言
配置文件 配置文件config.xml
config.xml -> php語言、java語言、Python語言
存儲數據,充當小型數據庫 存儲數據,充當小型數據庫
data.xml
規范數據格式 規范數據格式,是數據具有結構性,易讀易處理 是數據具有結構性,易讀易處理
XML和HTML的區別: 的區別:
1:html標簽不能自定義,XML只能自定義標簽;
2:html語法要求不嚴格,xml對於語法的要求非常嚴格,標簽必須是閉合的;
3:XML 被設計用來傳輸和存儲數據,其焦點是數據內容。
HTML 被設計用來顯示數據,其焦點是數據的外觀呈現。
xml的基本語法:
XML 的語法規則很簡單,且很有邏輯。
XML 文檔必須有根元素 文檔必須有根元素
根元素是所有其他元素的父元素;
<root> <child> <subchild>.....</subchild> </child> </root>
如上代碼,root就是根元素;
XML 聲明 聲明
<?xml version="1.0" encoding="utf-8"?>
聲明文件是可選部分,如果存在需要放在文檔的第一行;
version :版本號,代表XML使用的版本號
encoding :編碼格式,默認UTF-8
所謂的文檔聲明就是告訴解析器當前文檔格式、版本號以及編碼格式。
1.所有的 所有的 XML 元素都必須是成對閉合標簽 元素都必須是成對閉合標簽
2.非閉合標簽是非法的,解析器將報錯,不無正常解析;
3.XML 標簽對大小寫敏感 標簽對大小寫敏感。
4.XML標簽不允許有交叉嵌套 標簽不允許有交叉嵌套
5.XML標簽名不建議使用特殊字符,盡量只用數字字母下划線 標簽名不建議使用特殊字符,盡量只用數字字母下划線
6.XML 中的注釋 中的注釋
7.在 XML 中編寫注釋的語法與 HTML 的語法一致。
實體引用 實體引用 & 特殊字符 特殊字符
在 XML 中,一些字符擁有特殊的意義。
如果您把字符 "<" 放在 XML 元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。
<來代替 "<" 字符:
在 XML 中,有 5 個預定義的實體引用:
< | < |
> | > |
& | & |
' | ' |
" | " |
xml元素屬性
XML 元素中,也可以隨意添加一個或多個屬性,但是:
屬性值一定要用引號(單引號或雙引號)引起來
屬性名稱的命名規范與元素的命名規范相同
元素中的屬性是不允許重復的
其實,屬性也是用來存儲數據信息的,
沒有什么規矩可以告訴我們什么時候該使用屬性,而什么時候該使用元素。
但實際開發經驗是 在HTML中,屬性用起來很便利,而在 XML 中,應該盡量避免使用屬性。
因為:
一個屬性不能包含多個值(元素可以)
屬性值不能是結構化數據(元素可以)
屬性不容易擴展(為未來的變化)
屬性難以閱讀和維護。
將數據放在屬性中和放在子元素中,目的都是為了傳輸數據,而子元素更加容易被解析;
CDATA:
在瀏覽器中運行以上代碼,會報錯,因為數據中有很多特殊字符,
我們可以使用實體字符替換,但是,數據量太大,導致修改繁瑣且極度困難;
當我們遇到大量特殊字符時,可以使用CDATA將數據包裹;
例如:
<?xml version="1.0" encoding="UTF-8"?> <strory> <title>這是一個傷心的故事</title> <d>震驚!!!著名數學家尼古拉斯趙四,卻難解小學考題</d> <![CDATA[ 要存放的數據 ]]> <con><![CDATA[小學進博士考題1:已知 c<4,d>5,問:c和d那個更好看? ]]> </con> </strory>
對於內容比較少的情況,我們可以使用實體引用對特殊字符進行直接替換操作。
對於內容比較多的情況,如果文章描述、文章內容等等建議采用CDATA區段。
PHP解析xml文檔:
ML是一種數據傳輸格式,當PHP接收到的數據就是一段XML的時候,PHP提供了一個非常非常強大的類庫,SimpleXML類庫,專門用於實現對XML文檔的解析操作。
XML 解析原理:
① 讀取XML文檔到內存;
② 形成DOM樹結構;
③ 生成SimpleXML對象。
讀取解析成對象:
simplexml_load_file('xml_path')方法:
讀取節點的屬性:
attributes()方法獲取節點屬性
使用 使用SimpleXML增加節點:
//創建添加子節點
addChild('xxx','123'); 第二個屬性可以寫節點值
//創建添加子節點
addAttribute('xx');
asXML('xx.xml');//保存數據進XML文件,沒有文件,則創建;
~~~~~~~~~~~~~結