概述
XML:Extensible Markup Language(可擴展標記語言)的縮寫,是用來定義其它語言的一種元語言,其前身是SGML(Standard Generalized
Markup Language,標准通用標記語言)。它沒有標簽集(tag set),也沒有語法規則(grammatical rule),但是它有句法規則(syntax rule)。
任何XML文檔對任何類型的應用以及正確的解析都必須是良構的(well-formed),即每一個打開的標簽都必須有匹配的結束標簽,不得
含有次序顛倒的標簽,並且在語句構成上應符合技術規范的要求。XML文檔可以是有效的(valid),但並非一定要求有效。所謂有效文檔是指其符合其文檔
類型定義(DTD)的文檔。如果一個文檔符合一個模式(schema)的規定,那么這個文檔是"模式有效的(schema valid)"。
XML 是一種標記語言,很類似 HTML ,XML 的設計宗旨是傳輸數據,而非顯示數據 ,XML 標簽沒有被預定義。您需要自行定義標簽。 XML 被設計為具有自我描述性。 XML 是 W3C 的推薦標准
XML 用於創建新的 Internet 語言
很多新的 Internet 語言是通過 XML 創建的:
其中的例子包括:
XHTML - 最新的 HTML 版本 ,WSDL - 用於描述可用的 web service ,WAP 和 WML - 用於手持設備的標記語言 ,RSS - 用於 RSS feed 的語言 ,
RDF 和 OWL - 用於描述資源和本體 ,SMIL - 用於描述針針對 web 的多媒體
下面來看一個常用案例:
<bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
可以用如下圖來解釋:
實體引用
在 XML 中,一些字符擁有特殊的意義。
如果你把字符 "<" 放在 XML 元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。
這樣會產生 XML 錯誤:
<message>if salary < 1000 then</message>
為了避免這個錯誤,請用實體引用來代替 "<" 字符:
<message>if salary < 1000 then</message>
在 XML 中,有 5 個預定義的實體引用:
XML 命名規則
XML 元素必須遵循以下命名規則:
- 名稱可以含字母、數字以及其他的字符
- 名稱不能以數字或者標點符號開始
- 名稱不能以字符 “xml”(或者 XML、Xml)開始
- 名稱不能包含空格
可使用任何名稱,沒有保留的字詞。
什么是 XMLHttpRequest 對象?
XMLHttpRequest 對象用於在后台與服務器交換數據。
XMLHttpRequest 對象是開發者的夢想,因為您能夠:
- 在不重新加載頁面的情況下更新網頁
- 在頁面已加載后從服務器請求數據
- 在頁面已加載后從服務器接收數據
- 在后台向服務器發送數據
所有現代的瀏覽器都支持 XMLHttpRequest 對象。
創建 XMLHttpRequest 對象
所有現代瀏覽器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都內建了 XMLHttpRequest 對象。
通過一行簡單的 JavaScript 代碼,我們就可以創建 XMLHttpRequest 對象。
創建 XMLHttpRequest 對象的語法:
xmlhttp=new XMLHttpRequest();
為什么使用 XML 編輯器?
當今,XML 是非常重要的技術,並且開發項目正在使用這些基於 XML 的技術:
- 用 XML Schema 定義 XML 的結構和數據類型
- 用 XSLT 來轉換 XML 數據
- 用 SOAP 來交換應用程序之間的 XML 數據
- 用 WSDL 來描述網絡服務
- 用 RDF 來描述網絡資源
- 用 XPath 和 XQuery 來訪問 XML 數據
- 用 SMIL 來定義圖形
XSLT
XSLT(eXtensible Stylesheet Language Transformation)是一種用來轉換XML文檔結構的語言。
XSL的處理過程:
首先是根據XML文檔構造源樹,然后根據XSL規則將源樹轉換為結果樹,生成結果樹后,對其進行解釋,格式化為一種適合顯示、打印或是播放的格式。
XSLT和CSS的比較:
| CSS |
XSLT |
| 使用簡單 |
使用復雜 |
| 不能排序、添加或刪除元素 |
可排序、添加或刪除元素 |
| 不能訪問文檔除元素外的其它信息 |
能訪問其它信息 |
| 使用內存比較少 |
使用較多內存和處理器能力 |
| 與XML語法不同 |
語法與XML相同 |
XPath基礎
XPath就是一種專門用來在XML文檔中定位和查找信息的語言,通過XPath可對XML文檔中的元素和屬性進行遍歷,是高級XML應用的基礎 。
XPath主要有四種數據類型:(1)節點集.(2)布爾類型.(3)字符串類型.(4)數值類型
在XPath中,可以將節點划分為七種節點類型:(1)根節點(Root Node).(2)元素節點(Element Nodes).(3)文本節點(Text Nodes).(4)屬性節點(Attribute Nodes).(5)命名空間節點(Namespace Nodes).(6)處理指令節點(Processing Instruction Nodes).(7)注釋節點(Comment Nodes).
XPath節點關系:(1)父(parent).(2)子(children).(3)同胞(sibling).(4)先輩(ancestor).(5)后代(descendant).
XPath表達式
XPath將XML文檔看作由節點構成的層次樹,通過編寫XPath表達式來定位樹中特定的節點
XPath路徑表達式:
| 表達式 |
描述 |
| nodename |
選取此節點的所有子節點 |
| / |
從根節點選取,絕對路徑,表示當前文檔的根節點 |
| // |
從任意節點選取,相對路徑,表示當前文檔所有的節點 |
| . |
選取當前節點 |
| .. |
選取當前節點的父節點 |
| @ |
選取屬性 |
例子
<?xml version="1.0" encoding="GB2312"?>
<bookstore>
<book>
<title lang="en">RESTful Web Services</title>
<price>29.00</price>
</book>
<book>
<title lang="zh">C#編程基礎</title>
<price>46.00</price>
</book>
</bookstore>
解析:
| bookstore |
選取 bookstore 元素的所有子節點 |
| /bookstore |
選取根節點bookstore元素 |
| /bookstore/book/price |
選取bookstore元素下所有book元素的所有price元素 |
| /bookstore/book/* |
選取/bookstore/book的所有子元素 |
| bookstore/book |
選取bookstore元素下所有的book子元素 |
| //bookstore |
選取文檔中所有的bookstore元素,無論它在什么層次 |
| bookstore//book |
選取在bookstore元素下所有的book元素,無論它們位於bookstore之下的什么位置 |
| /bookstore/*/price |
選取bookstore的子元素中,包含有price作為子元素的元素 |
| //* |
選取文件中的所有元素 |
| //@lang |
選取所有名為 lang 的屬性 |
謂語表達式:
| 路徑表達式 |
描述 |
| /bookstore/book[last()] |
選取屬於bookstore子元素的最后一個book元素 |
| /bookstore/book[last()-1] |
選取屬於bookstore子元素的倒數第二個book元素 |
| /bookstore/book[position()<3] |
選取前兩個屬於bookstore元素的子元素的book元素 |
| //title[@lang] |
選取所有擁有名為lang的屬性的title元素 |
| //title[@lang="en"] |
選取所有title元素,且這些元素擁有值為 eng 的 lang 屬性 |
| /bookstore/book[price>15.00] |
選取所有bookstore元素的book元素,且其中的price元素的值須大於15.00 |
| /bookstore/book[price>15.00]/title |
選取所有bookstore元素中的book元素的title元素,且其中的price元素的值須大於15.00 |
| //title[@*] |
選取所有帶有屬性的 title 元素 |
如果需要選擇一個以上的路徑,可以在XPath表達式中使用“|”運算符:
| 路徑表達式 |
描述 |
| //book/title | //book/price |
選取所有book元素的title和price元素 |
| //title | //price |
選取文檔中所有的title和price元素 |
| /bookstore/book/title | //price |
選取所有屬於bookstore元素的book元素的title元素,以及文檔中所有的price元素 |
XPath表達式的常用運算符:
| 運算符 |
描述 |
實例 |
| | |
計算兩個節點集 |
//book | //cd,返回所有帶有 book 和 cd 元素的節點集 |
| + |
加法 |
6 + 4, |
| - |
減法 |
6 - 4 |
| * |
乘法 |
6 * 4 |
| div |
除法 |
8 div 4 |
| = |
等於 |
price=15 |
| != |
不等於 |
price!=15 |
| < |
小於 |
price<15 |
| <= |
小於或等於 |
price<=15 |
| > |
大於 |
price>15 |
| >= |
大於或等於 |
price>=15 |
| or |
或 |
price=15 or price=35 |
| and |
與 |
price>15 or price<35 |
| mod |
計算除法的余數 |
5 mod 2 |
示例
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"..\..\CD.xml");
XmlElement root = null;
root = doc.DocumentElement;
XmlNodeList listNodes = null;
listNodes = root.SelectNodes("/bookstore/book/price");
foreach (XmlNode node in listNodes )
{
richTextBox1.Text += node.InnerText + "\n";
}
}
結果:
29.00
46.00
歡迎各位參與討論,如果覺得對你有幫助,請點擊
推薦下,萬分謝謝.
作者:spring yang
出處:http://www.cnblogs.com/springyangwc/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


