溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XML有哪些拓展

發(fā)布時間:2020-07-13 15:32:40 來源:億速云 閱讀:149 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家?guī)碛嘘PXML有哪些拓展,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

以下是對XML基礎的總結

初識

http://www.php.cn/

基礎

http://www.php.cn/

下面是對XML的拓展包括 XML屬性、驗證

XML 元素可以在開始標簽中包含屬性,類似 HTML。

屬性 (Attribute) 提供關于元素的額外信息。

XML 屬性

從 HTML,你會回憶起這個:<img src="computer.gif">。"src" 屬性提供有關 <img> 元素的額外信息。

在 HTML 中(以及在 XML 中),屬性提供有關元素的額外信息:

<img src="computer.gif">
<a href="demo.asp">

屬性通常提供不屬于數據組成部分的信息。在下面的例子中,文件類型與數據無關,但是對需要處理這個元素的軟件來說卻很重要:

<file type="gif">computer.gif</file>

XML 屬性必須加引號

屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person 標簽可以這樣寫:

<person sex="female">

或者這樣也可以:

<person sex='female'>

注釋:如果屬性值本身包含雙引號,那么有必要使用單引號包圍它,就像這個例子:

<gangster name='George "Shotgun" Ziegler'>

或者可以使用實體引用:

<gangster name="George &quot;Shotgun&quot; Ziegler">

XML 元素 vs. 屬性

請看這些例子:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

在第一個例子中,sex 是一個屬性。在第二個例子中,sex 則是一個子元素。兩個例子均可提供相同的信息。

沒有什么規(guī)矩可以告訴我們什么時候該使用屬性,而什么時候該使用子元素。我的經驗是在 HTML 中,屬性用起來很便利,但是在 XML 中,您應該盡量避免使用屬性。如果信息感覺起來很像數據,那么請使用子元素吧。

我最喜歡的方式

下面的三個 XML 文檔包含完全相同的信息:

第一個例子中使用了 date 屬性:

<note date="08/08/2008">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

第二個例子中使用了 date 元素:

<note>
<date>08/08/2008</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

第三個例子中使用了擴展的 date 元素(這是我的最愛):

<note>
<date>
  <day>08</day>
  <month>08</month>
  <year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

避免 XML 屬性?

因使用屬性而引起的一些問題:

  • 屬性無法包含多重的值(元素可以)

  • 屬性無法描述樹結構(元素可以)

  • 屬性不易擴展(為未來的變化)

  • 屬性難以閱讀和維護

請盡量使用元素來描述數據。而僅僅使用屬性來提供與數據無關的信息。

不要做這樣的蠢事(這不是 XML 應該被使用的方式):

<note day="08" month="08" year="2008"
to="George" from="John" heading="Reminder" 
body="Don't forget the meeting!">
</note>

針對元數據的 XML 屬性

有時候會向元素分配 ID 引用。這些 ID 索引可用于標識 XML 元素,它起作用的方式與 HTML 中 ID 屬性是一樣的。這個例子向我們演示了這種情況:

<messages>
  <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from>George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
</messages>

上面的 ID 僅僅是一個標識符,用于標識不同的便簽。它并不是便簽數據的組成部分。

在此我們極力向您傳遞的理念是:元數據(有關數據的數據)應當存儲為屬性,而數據本身應當存儲為元素。

XML驗證

擁有正確語法的 XML 被稱為“形式良好”的 XML。

通過某個 DTD 進行了驗證的 XML 是“合法”的 XML。

形式良好的 XML 文檔

一個"形式良好"的 XML 文檔擁有正確的語法。

一個"形式良好"的 XML 文檔會遵守前幾章介紹過的 XML 語法規(guī)則:

  • XML 文檔必須有根元素

  • XML 文檔必須有關閉標簽

  • XML 標簽對大小寫敏感

  • XML 元素必須被正確的嵌套

  • XML 屬性必須加引號

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

驗證 XML 文檔

一個合法的 XML 文檔是"形式良好"的 XML 文檔,同樣遵守文檔類型定義 (DTD) 的語法規(guī)則:

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE note SYSTEM "Note.dtd"><note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

在上例中,DOCTYPE 聲明是對外部 DTD 文件的引用。下面的段落展示了這個文件的內容。

XML DTD

DTD 的作用是定義 XML 文檔的結構。它使用一系列合法的元素來定義文檔結構:

<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>

有關DTD的總結:

http://www.php.cn/

XML Schema

<xs:element name="note">

<xs:complexType>
  <xs:sequence>
    <xs:element name="to"      type="xs:string"/>
    <xs:element name="from"    type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body"    type="xs:string"/>
  </xs:sequence>
</xs:complexType>

</xs:element>

一個通用的驗證器

XML 錯誤會終止您的程序

XML 文檔中的錯誤會終止你的 XML 程序。

W3C 的 XML 規(guī)范聲明:如果 XML 文檔存在錯誤,那么程序就不應當繼續(xù)處理這個文檔。理由是,XML 軟件應當輕巧,快速,具有良好的兼容性。

如果使用 HTML,創(chuàng)建包含大量錯誤的文檔是有可能的(比如你忘記了結束標簽)。其中一個主要的原因是 HTML 瀏覽器相當臃腫,兼容性也很差,并且它們有自己的方式來確定當發(fā)現(xiàn)錯誤時文檔應該顯示為什么樣子。

使用 XML 時,這種情況不應當存在。

對您的 XML 進行語法檢查 - 僅用于 IE 瀏覽器

為了幫助您對 XML 進行語法檢查,我們創(chuàng)建了一個 XML 驗證器。

把您的 XML 粘貼到下面的文本框中,然后點擊"驗證"按鈕來進行語法檢查。

根據 DTD 來驗證 XML

只要把 DOCTYPE 聲明添加到您的 XML 中,然后點擊驗證按鈕即可:

注釋:只有在 Internet Explorer 中,可以根據 DTD 來驗證 XML。Firefox, Mozilla, Netscape 以及 Opera 做不到這一點。

如何將XML顯示在Html上:

實例

  • 從 XML 文件中加載數據,然后把數據顯示為一個 HTML 表格

在 HTML 中顯示數據

在上一節(jié)中,我們講解了如何通過 JavaScript 來解析 XML 并訪問 DOM。

本例遍歷一個 XML 文件 (cd_catalog.xml),然后把每個 CD 元素顯示為一個 HTML 表格行:

<html>
<body>

<script type="text/javascript">
var xmlDoc=null;
if (window.ActiveXObject)
{// code for IExmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
else if (document.implementation.createDocument)
{// code for Mozilla, Firefox, Opera, etc.xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
if (xmlDoc!=null)
{
xmlDoc.async=false;
xmlDoc.load("cd_catalog.xml");

document.write("<table border='1'>");

var x=xmlDoc.getElementsByTagName("CD");
for (i=0;i<x.length;i++)
{ 
document.write("<tr>");
document.write("<td>");
document.write(
x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
document.write("</td>");

document.write("<td>");
document.write(
x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
document.write("</td>");
document.write("</tr>");
}
document.write("</table>");
}
</script>

</body>
</html>

例子解釋:

  1. 檢測瀏覽器,然后使用合適的解析器來加載 XML

  2. 創(chuàng)建一個 HTML 表格(<table border="1">)

  3. 使用 getElementsByTagName() 來獲得所有 XML 的 CD 節(jié)點

  4. 針對每個 CD 節(jié)點,把 ARTIST 和 TITLE 中的數據顯示為表格數據

  5. 用 </table> 結束表格

XMLHttpRequest

什么是 XMLHttpRequest 對象?

XMLHttpRequest 對象是開發(fā)者的夢想,因為您能夠:

  • 在不重新加載頁面的情況下更新網頁

  • 在頁面已加載后從服務器請求數據

  • 在頁面已加載后從服務器接收數據

  • 在后臺向服務器發(fā)送數據

所有現(xiàn)代的瀏覽器都支持 XMLHttpRequest 對象。

實例:當鍵入文本時與服務器進行 XML HTTP 通信。

創(chuàng)建 XMLHttpRequest 對象

通過一行簡單的 JavaScript 代碼,我們就可以創(chuàng)建 XMLHttpRequest 對象。

在所有現(xiàn)代瀏覽器中(包括 IE 7):

xmlhttp=new XMLHttpRequest()

在 Internet Explorer 5 和 6 中:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

實例

<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
  {// code for all new browsers
  xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// code for IE5 and IE6
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
  }
else
  {
  alert("Your browser does not support XMLHTTP.");
  }
}

function state_Change()
{
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {// 200 = OK
    // ...our code here...
    }
  else
    {
    alert("Problem retrieving XML data");
    }
  }
}
</script>

TIY

注釋:onreadystatechange 是一個事件句柄。它的值 (state_Change) 是一個函數的名稱,當 XMLHttpRequest 對象的狀態(tài)發(fā)生改變時,會觸發(fā)此函數。狀態(tài)從 0 (uninitialized) 到 4 (complete) 進行變化。僅在狀態(tài)為 4 時,我們才執(zhí)行代碼。

為什么使用 Async=true ?

我們的實例在 open() 的第三個參數中使用了 "true"。

該參數規(guī)定請求是否異步處理。

True 表示腳本會在 send() 方法之后繼續(xù)執(zhí)行,而不等待來自服務器的響應。

onreadystatechange 事件使代碼復雜化了。但是這是在沒有得到服務器響應的情況下,防止代碼停止的最安全的方法。

通過把該參數設置為 "false",可以省去額外的 onreadystatechange 代碼。如果在請求失敗時是否執(zhí)行其余的代碼無關緊要,那么可以使用這個參數。

XML實例:

XML 文檔實例

請看下面這個 XML 文檔 ( "cd_catalog.xml" ),它描述了一個 CD 目錄:

<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
  <CD>
    <TITLE>Empire Burlesque</TITLE>
    <ARTIST>Bob Dylan</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>Columbia</COMPANY>
    <PRICE>10.90</PRICE>
    <YEAR>1985</YEAR>
  </CD>
.
.
... more ...
.

加載 XML 文檔

為了加載 XML 文檔 (cd_catalog.xml),我們使用了與 XML 解析器那一節(jié)中相同的代碼:

var xmlDoc;
if (window.ActiveXObject)
  {  // code for IE
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
else if (document.implementation.createDocument)
  {  // code for Firefox, Mozilla, Opera, etc.
  xmlDoc=document.implementation.createDocument("","",null);
  }
else
  {
  alert('Your browser cannot handle this script');
  }
xmlDoc.async=false;
xmlDoc.load("cd_catalog.xml");

在本代碼執(zhí)行后,xmlDoc 成為一個 XML DOM 對象,可由 JavaScript 訪問。

把 XML 數據顯示為 HTML 表格

以下代碼使用來自 XML DOM 對象的數據來填充一個 HTML 表格:

document.write("<table border='1'>");

var x=xmlDoc.getElementsByTagName("CD");
for (var i=0;i<x.length;i++)
{ 
document.write("<tr>");
document.write("<td>");
document.write(
x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
document.write("</td>");

document.write("<td>");
document.write(
x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
document.write("</td>");
document.write("</tr>");
}
document.write("</table>");

針對 XML 文檔中的每個 CD 元素,會創(chuàng)建一個表格行。每個表格行包含兩個表格數據單元,其中的數據來自當前 CD 元素的 ARTIST 和 TITLE。

在任意 HTML 元素中顯示 XML 數據

XML 數據可以拷貝到任何有能力顯示文本的 HTML 元素。

下面的代碼為 HTML 文件的 <head> 部分。這段代碼從第一個 <CD> 元素中獲得 XML 數據,然后在 id="show" 的 HTML 元素中顯示數據:

var x=xmlDoc.getElementsByTagName("CD");
i=0;

function display()
{
artist=
(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
title=
(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
year=
(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue);

txt="Artist: "+artist+"<br />Title: "+title+"<br />Year: "+year;

document.getElementById("show").innerHTML=txt;
}

HTML 的 body 元素包含一個 onload 事件屬性,它的作用是在頁面已經加載時調用 display() 函數。body 元素中還包含了供接受 XML 數據的 <p id='show'> 元素。

<p id='show'></p>

</body>

通過上例,你只能看到來自 XML 文檔中第一個 CD 元素中的數據。為了導航到數據的下一行,必須添加更多的代碼。

添加導航腳本

為了向上例添加導航(功能),需要創(chuàng)建 next() 和 previous() 兩個函數:

function next()
{
if (i<x.length-1)
  {
  i++;
  display();
  }
}

function previous()
{
if (i>0)
  {
  i--;
  display();
  }
}

next() 函數確保已到達最后一個 CD 元素后不顯示任何東西,previous () 函數確保已到達第一個 CD 元素后不顯示任何東西。

通過點擊 next/previous 按鈕來調用 next() 和 previous() 函數:

<input type="button" onclick="previous()" value="previous" />
<input type="button" onclick="next()" value="next" />

上述就是小編為大家分享的XML有哪些拓展了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI