XML 的簡介與開發


概述

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>

 

 

可以用如下圖來解釋:

1

 

 

實體引用

在 XML 中,一些字符擁有特殊的意義。

如果你把字符 "<" 放在 XML 元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。

這樣會產生 XML 錯誤:

<message>if salary < 1000 then</message>

 

為了避免這個錯誤,請用實體引用來代替 "<" 字符:

<message>if salary &lt; 1000 then</message> 

 

在 XML 中,有 5 個預定義的實體引用:

image

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

歡迎各位參與討論,如果覺得對你有幫助,請點擊image    推薦下,萬分謝謝.

作者:spring yang

出處:http://www.cnblogs.com/springyangwc/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM