XML 是一種用于存儲和傳輸數(shù)據(jù)的與軟件和硬件無關的工具。
什么是XML?
XML代表eXtensible Markup Language(可擴展標記語言)
。XML是一種與HTML非常相似的標記語言。XML被設計用于存儲和傳輸數(shù)據(jù)。XML被設計成具有自我描述性。XML不執(zhí)行任何操作,也許有點難理解,但XML不執(zhí)行任何操作。
XML示例
這是一張存儲為XML的給Tove的Jani的便簽:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面的XML相當自我描述:
- 它包含了發(fā)件人信息
- 它包含了收件人信息
- 它有一個標題
- 它有一個消息正文
但是,上面的XML仍然不執(zhí)行任何操作。XML只是用標記包裝的信息。
必須有人編寫一段軟件來發(fā)送、接收、存儲或顯示它:
Note
To: Tove
From: Jani
Reminder
Don't forget me this weekend!
XML和HTML的區(qū)別
XML和HTML是出于不同目的而設計的:
- XML被設計用于攜帶數(shù)據(jù) - 專注于數(shù)據(jù)是什么
- HTML被設計用于顯示數(shù)據(jù) - 專注于數(shù)據(jù)的呈現(xiàn)方式
XML標簽不像HTML標簽那樣是預定義的。XML語言沒有預定義的標簽。上面示例中的標簽(如<to>
和<from>
)在任何XML標準中都未定義。這些標簽是XML文檔的作者“創(chuàng)造”的。
HTML使用預定義標簽,如<p>
、<h1>
、<table>
等。使用XML,作者必須定義標簽和文檔結構。
XML是可擴展的
大多數(shù)XML應用程序即使添加(或刪除)新數(shù)據(jù)也能正常工作。
想象一個應用程序,設計用于顯示note.xml
的原始版本(<to>
<from>
<heading>
<body>
)。然后想象一個具有添加的<date>
和<hour>
元素以及刪除<heading>
的新版本的note.xml
。
XML構造的方式使得舊版本的應用程序仍然可以工作:
<note>
<date>2015-09-01</date>
<hour>08:30</hour>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>
舊版本
Note
To: Tove
From: Jani
Reminder
Don't forget me this weekend!
新版本
Note
To: Tove
From: Jani
Date: 2015-09-01 08:30
Don't forget me this weekend!
XML簡化事務
- XML簡化數(shù)據(jù)共享
- XML簡化數(shù)據(jù)傳輸
- XML簡化平臺更改
- XML簡化數(shù)據(jù)可用性
許多計算機系統(tǒng)包含以不兼容格式存儲的數(shù)據(jù)。在不兼容的系統(tǒng)(或升級的系統(tǒng))之間交換數(shù)據(jù)對于Web開發(fā)人員來說是一項耗時的任務。必須轉換大量數(shù)據(jù),并且通常會丟失不兼容的數(shù)據(jù)。
XML以純文本格式存儲數(shù)據(jù)。這提供了一種與軟件和硬件無關的存儲、傳輸和共享數(shù)據(jù)的方式。
XML還使得擴展或升級到新的操作系統(tǒng)、新的應用程序或新的瀏覽器變得更容易,而不會丟失數(shù)據(jù)。
使用XML,數(shù)據(jù)可以供各種“閱讀機器”使用,如人類、計算機、語音機器、新聞源等。
XML的用途
XML在Web開發(fā)的許多方面都得到了應用。
XML分離數(shù)據(jù)與演示
XML通常用于將數(shù)據(jù)與演示分離。XML不包含有關如何顯示的任何信息。相同的XML數(shù)據(jù)可以在許多不同的演示情境中使用。因此,使用XML,數(shù)據(jù)和演示之間存在完全的分離。
XML通常與HTML搭配使用
在許多HTML應用程序中,XML用于存儲或傳輸數(shù)據(jù),而HTML用于格式化和顯示相同的數(shù)據(jù)。
XML分離數(shù)據(jù)與HTML
在HTML中顯示數(shù)據(jù)時,當數(shù)據(jù)發(fā)生變化時不應該修改HTML文件。使用XML,數(shù)據(jù)可以存儲在單獨的XML文件中。通過幾行JavaScript代碼,您可以讀取一個XML文件并更新任何HTML頁面的數(shù)據(jù)內容。
Books.xml
示例:
<?xml version="1.0" encoding="UTF-8"?>
<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">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
事務數(shù)據(jù)
存在成千上萬種XML格式,用于描述不同行業(yè)的日常數(shù)據(jù)交易:
- 股票和股份
- 金融交易
- 醫(yī)療數(shù)據(jù)
- 數(shù)學數(shù)據(jù)
- 科學測量
- 新聞信息
- 天氣服務
示例 XML
XMLNews是用于交換新聞和其他信息的規(guī)范。使用標準使得新聞制作者和新聞消費者更容易在不同的硬件、軟件和編程語言之間產生、接收和存檔任何類型的新聞信息。
一個示例XMLNews文檔:
<?xml version="1.0" encoding="UTF-8"?>
<nitf>
<head>
<title>Colombia Earthquake</title>
</head>
<body>
<headline>
<hl1>143 Dead in Colombia Earthquake</hl1>
</headline>
<byline>
<bytag>By Jared Kotler, Associated Press Writer</bytag>
</byline>
<dateline>
<location>Bogota, Colombia</location>
<date>Monday January 25 1999 7:28 ET</date>
</dateline>
</body>
</nitf>
示例 XML 天氣服務
來自美國國家海洋和大氣管理局(NOAA)的XML國家氣象服務:
<?xml version="1.0" encoding="UTF-8"?>
<current_observation>
<credit>NOAA's National Weather Service</credit>
<credit_URL>http://weather.gov/</credit_URL>
<image>
<url>http://weather.gov/images/xml_logo.gif</url>
<title>NOAA's National Weather Service</title>
<link>http://weather.gov</link>
</image>
<location>New York/John F. Kennedy Intl Airport, NY</location>
<station_id>KJFK</station_id>
<latitude>40.66</latitude>
<longitude>-73.78</longitude>
<observation_time_rfc822>Mon, 11 Feb 2008 06:51:00 -0500 EST
</observation_time_rfc822>
<weather>A Few Clouds</weather>
<temp_f>11</temp_f>
<temp_c>-12</temp_c>
<relative_humidity>36</relative_humidity>
<wind_dir>West</wind_dir>
<wind_degrees>280</wind_degrees>
<wind_mph>18.4</wind_mph>
<wind_gust_mph>29</wind_gust_mph>
<pressure_mb>1023.6</pressure_mb>
<pressure_in>30.23</pressure_in>
<dewpoint_f>-11</dewpoint_f>
<dewpoint_c>-24</dewpoint_c>
<windchill_f>-7</windchill_f>
<windchill_c>-22</windchill_c>
<visibility_mi>10.00</visibility_mi>
<icon_url_base>http://weather.gov/weather/images/fcicons/</icon_url_base>
<icon_url_name>nfew.jpg</icon_url_name>
<disclaimer_url>http://weather.gov/disclaimer.html</disclaimer_url>
<copyright_url>http://weather.gov/disclaimer.html</copyright_url>
</current_observation>
XML樹
XML文檔形成了一棵樹狀結構,從“根”開始分支到“葉子”。
XML樹結構
DOM節(jié)點樹
一個XML文檔可以被看作是一棵樹,這被稱為DOM(Document Object Model)節(jié)點樹
。DOM節(jié)點樹以根節(jié)點為起點,分支到各個子節(jié)點,形成一個層級結構。
一個XML文檔的示例
上圖表示了XML中的圖書:
<?xml version="1.0" encoding="UTF-8"?>
<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樹始于根元素,從根元素分支到子元素。
所有元素都可以有子元素(子元素):
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
術語父元素、子元素和兄弟元素用于描述元素之間的關系。
- 父元素有子元素。
- 子元素有父元素。
- 兄弟元素是在同一級別上的子元素(兄弟姐妹)。
所有元素都可以有文本內容(例如:Harry Potter)和屬性(例如:category="cooking")。
自描述語法
XML使用了一種非常自描述的語法。
一個前導定義了XML版本和字符編碼:
<?xml version="1.0" encoding="UTF-8"?>
下一行是文檔的根元素:
<bookstore>
下一行開始了一個<book>
元素:
<book category="cooking">
<book>
元素有4個子元素:<title>
、<author>
、<year>
、<price>
。
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
下一行結束了<book>
元素:
</book>
從這個例子中,您可以假設XML文檔包含了有關書店中書籍的信息。
XML語法規(guī)則
XML的語法規(guī)則非常簡單和邏輯。這些規(guī)則易于學習和使用。
XML文檔必須有一個根元素
XML文檔必須包含一個作為所有其他元素的父元素的根元素:
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
在這個例子中,<note>
是根元素:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML前導部分
這一行被稱為XML前導部分:
<?xml version="1.0" encoding="UTF-8"?>
XML前導部分是可選的。如果存在,它必須在文檔中首先出現(xiàn)。
所有XML元素必須有一個結束標簽
在XML中,省略結束標簽是非法的。所有元素必須有一個結束標簽:
<p>This is a paragraph.</p>
<br />
XML標簽區(qū)分大小寫
XML標簽是區(qū)分大小寫的。標簽<Letter>
與標簽<letter>
是不同的。
開放和關閉標簽必須使用相同的大小寫
<message>This is correct</message>
“開放和關閉標簽”通常被稱為“開始和結束標簽”。
XML元素必須嵌套正確
在XML中,所有元素必須在彼此之內正確嵌套:
<b><i>This text is bold and italic</i></b>
XML屬性值必須始終用引號括起來
XML元素可以具有類似HTML中的名稱/值對的屬性。在XML中,屬性值必須始終用引號括起來:
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>
實體引用
在XML中,一些字符具有特殊的含義。為了避免解釋錯誤,需要使用實體引用:
<message>salary < 1000</message>
XML中的注釋
在XML中編寫注釋的語法與HTML類似:
<!-- This is a comment -->
在XML中保留空白
XML不截斷多個空白,保留所有空白字符。
XML將新行存儲為LF
XML將新行存儲為LF(Line Feed)。
格式良好的XML
符合上述語法規(guī)則的XML文檔被稱為“格式良好”的XML文檔。
XML元素
一個XML文檔包含XML元素。
什么是XML元素?
一個XML元素是從(包括)元素的開始標簽到(包括)元素的結束標簽的所有內容。
<price>29.99</price>
一個元素可以包含:
- 文本
- 屬性
- 其他元素
- 或以上的混合
<bookstore>
<book category="children">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上面的例子中:
-
<title>
、<author>
、<year>
和<price>
具有文本內容,因為它們包含文本(如29.99)。 -
<bookstore>
和<book>
具有元素內容,因為它們包含元素。 -
<book>
具有一個屬性(category="children"
)。
空XML元素
沒有內容的元素被稱為空元素。
在XML中,可以這樣表示一個空元素:
<element></element>
也可以使用所謂的自閉合標簽:
<element />
這兩種形式在XML軟件(閱讀器、解析器、瀏覽器)中產生相同的結果。
空元素可以有屬性。
XML命名規(guī)則
XML元素必須遵循以下命名規(guī)則:
- 元素名稱區(qū)分大小寫
- 元素名稱必須以字母或下劃線開頭
- 元素名稱不能以字母xml(或XML、Xml等)開頭
- 元素名稱可以包含字母、數(shù)字、連字符、下劃線和句點
- 元素名稱不能包含空格
除了xml,任何名稱都可以使用,沒有保留的單詞(除了xml)。
最佳命名實踐
- 創(chuàng)建描述性的名稱,比如:
<person>
、<firstname>
、<lastname>
。 - 創(chuàng)建簡短和簡單的名稱,比如:
<book_title>
而不是<the_title_of_the_book>
。
命名約定
一些常用的XML元素命名約定:
- 小寫:
<firstname>
(所有字母都小寫) - 大寫:
<FIRSTNAME>
(所有字母都大寫) - 蛇形命名:
<first_name>
(下劃線分隔單詞,常用于SQL數(shù)據(jù)庫) - 帕斯卡命名:
<FirstName>
(每個單詞的首字母大寫,C程序員常用) - 駱駝命名:
<firstName>
(每個單詞的首字母大寫,除了第一個,JavaScript中常用)
提示! 選擇您的命名風格,并始終保持一致!
XML元素是可擴展的
XML元素可以擴展以攜帶更多的信息。
看下面的XML示例:
<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>
假設我們創(chuàng)建了一個應用程序,從XML文檔中提取<to>
、<from>
和<body>
元素以生成以下輸出:
MESSAGE
To: Tove
From: Jani
Don't forget me this weekend!
想象一下,XML文檔的作者向其添加了一些額外的信息:
<note>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
應用程序是否應該崩潰或中斷?
不應該。應用程序應該仍然能夠在XML文檔中找到<to>
、<from>
和<body>
元素,并生成相同的輸出。
這是XML的優(yōu)點之一。它可以在不破壞應用程序的情況下進行擴展。
XML屬性
XML元素可以有屬性,就像HTML一樣。
XML屬性必須用引號括起來
屬性值必須始終用引號括起來??梢允褂脝我柣螂p引號。
對于一個人的性別,<person>
元素可以這樣寫:
<person gender="female">
或者像這樣:
<person gender='female'>
如果屬性值本身包含雙引號,可以使用單引號,就像在這個例子中:
<gangster name='George "Shotgun" Ziegler'>
或者可以使用字符實體:
<gangster name="George "Shotgun" Ziegler">
XML元素 vs 屬性
在XML中,沒有規(guī)定何時使用屬性或何時使用元素的規(guī)則。
我最喜歡的方式
以下三個XML文檔包含完全相同的信息:
在第一個例子中使用了一個date屬性:
<note date="2008-01-10">
<to>Tove</to>
<from>Jani</from>
</note>
在第二個例子中使用了一個<date>
元素:
<note>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
</note>
在第三個例子中使用了一個擴展的<date>
元素:(這是我最喜歡的)
<note>
<date>
<year>2008</year>
<month>01</month>
<day>10</day>
</date>
<to>Tove</to>
<from>Jani</from>
</note>
避免使用XML屬性?
在使用屬性時要考慮的一些事項有:
- 屬性不能包含多個值(元素可以)
- 屬性不能包含樹結構(元素可以)
- 屬性不容易擴展(以適應將來的更改)
不要陷入這種情況:
<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
用于元數(shù)據(jù)的XML屬性
有時會為元素分配ID引用。這些ID可以用來識別XML元素,方式與HTML中的id屬性類似。以下是此示例:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
上述id屬性用于標識不同的注釋。它不是注釋本身的一部分。
我想在這里說的是,元數(shù)據(jù)(關于數(shù)據(jù)的數(shù)據(jù))應該存儲為屬性,而數(shù)據(jù)本身應該存儲為元素。
XML命名空間
XML命名空間提供了一種避免元素名稱沖突的方法。
名稱沖突
在XML中,元素名稱由開發(fā)人員定義。這通常導致在嘗試混合來自不同XML應用程序的XML文檔時發(fā)生沖突。
這個XML包含HTML表信息:
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
這個XML包含有關桌子(家具的一部分)的信息:
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
如果將這些XML片段相加,將會出現(xiàn)名稱沖突。兩者都包含一個<table>
元素,但這些元素具有不同的內容和含義。
用戶或XML應用程序將不知道如何處理這些差異。
使用前綴解決名稱沖突
在XML中,可以通過使用名稱前綴輕松避免名稱沖突。
這個XML包含有關HTML表和家具的信息:
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
在上面的例子中,不會發(fā)生沖突,因為這兩個<table>
元素具有不同的名稱。
XML命名空間 - xmlns屬性
在XML中使用前綴時,必須為前綴定義一個命名空間??梢酝ㄟ^元素的開始標記中的xmlns屬性來定義命名空間。
命名空間聲明具有以下語法:xmlns:prefix="URI"。
<root>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
在上面的例子中:
- 第一個
<table>
元素中的xmlns屬性為h:前綴提供了一個合格的命名空間。 - 第二個
<table>
元素中的xmlns屬性為f:前綴提供了一個合格的命名空間。
當為元素定義命名空間時,所有具有相同前綴的子元素都與相同的命名空間相關聯(lián)。
命名空間也可以在XML根元素中聲明:
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
注意: 解析器不使用命名空間URI查找信息。使用URI的目的是為命名空間提供一個唯一的名稱。然而,公司通常將命名空間用作指向包含命名空間信息的網(wǎng)頁的指針。
統(tǒng)一資源標識符(URI)
統(tǒng)一資源標識符(URI)是一個字符串,用于標識互聯(lián)網(wǎng)資源。最常見的URI是統(tǒng)一資源定位符(URL),用于標識互聯(lián)網(wǎng)域地址。另一種不太常見的URI類型是統(tǒng)一資源名稱(URN)。
默認命名空間
為元素定義默認命名空間可以避免在所有子元素中使用前綴。它具有以下語法:xmlns="namespaceURI"。
這個XML包含HTML表信息:
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
這個XML包含有關家具的信息:
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
實際使用中的命名空間
XSLT是一種可用于將XML文檔轉換為其他格式的語言。
下面的XML文檔是用于將XML轉換為HTML的文檔。
命名空間"http://www.w3.org/1999/XSL/Transform"標識HTML文檔中的XSLT元素:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
最后
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding
,關注后即可獲取最新文章推送文章來源:http://www.zghlxwxcb.cn/news/detail-839969.html
看完如果覺得有幫助,歡迎點贊、收藏、關注文章來源地址http://www.zghlxwxcb.cn/news/detail-839969.html
到了這里,關于XML 簡介及用法詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!