XML學(xué)習(xí)筆記(三)進(jìn)階篇_Xml教程
推薦:如何判斷遠(yuǎn)程圖片是否存在收集了幾種 判斷遠(yuǎn)程圖片是否存在的方法 js 判斷 : script language=javascript function IsExist(url) { x = new ActiveXObject(Microsoft.XMLHTTP) x.open(HEAD,url,false) x.send() return x.status==200 } alert(IsExist(/images/logo1.gif)) /scr
一、NameSpaces(命名空間)
說到NameSpaces我們很快會(huì)聯(lián)想到.Net的命名空間。是的,XML是可擴(kuò)展的是由開發(fā)者定義的,所以相同的標(biāo)記會(huì)有不同的含義。如果將這些標(biāo)記混合在一起,XmlParser無法去識(shí)別他們之間的區(qū)別。我們嘗試從不同的XML應(yīng)用讀取XML時(shí)也會(huì)引起混亂。
解決的直接的思路是使用一個(gè)前綴�?梢栽诿總(gè)標(biāo)記前面加一個(gè)前綴作區(qū)分。而當(dāng)我們使用前綴的時(shí)候,我們必須為前綴做一個(gè)Namespaces的聲明調(diào)用。Namespaces是作為一個(gè)xmlns的Attribute調(diào)用的。語(yǔ)法如下xmlns:prefix="URI"。例子:
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="http://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
為一個(gè)元素定義了Namespace則它的所有的子元素都會(huì)使用相同的Namespace。因此Namespace可以定義在root元素中。
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<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>
為了簡(jiǎn)化前綴,我們可以定義默認(rèn)的命名空間(Default Namespaces)。語(yǔ)法是:xmlns="namespaceURI"。例子:
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
一個(gè)說明Namespaces的最好例子是XSLT。XSLT是一種XML語(yǔ)言。XSLT用來把XML文件轉(zhuǎn)換成另一種格式,如HTML。下面是一個(gè)XSLT文件,你可以看到大部分是HTML標(biāo)記,而同時(shí)有一部分標(biāo)記使用xsl為前綴的標(biāo)記。
<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 align="left">Title</th>
<th 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>
二、XML CDATA
在XML文檔中的所有Text都會(huì)被Parser進(jìn)行分析,除了在CDATA中的文本。
PCDATA:Parsed Character Data,是能夠被Parser分析的XML文本數(shù)據(jù)。
CDATA:(Unparsed)Character Data,是不為Parser所分析的XML文本數(shù)據(jù)。
在CDATA可以包含一些可能會(huì)引起錯(cuò)誤的符號(hào)。例如如果一個(gè)Element包含有“<”和“>”將會(huì)引起Parser的錯(cuò)誤。因此可以將它包含在CDATA中。CDATA以“<![CDATA[”開始;以“]]>”結(jié)束。
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
注意:
CDATA的文本中不能包含有“]]>”字符串。而結(jié)束標(biāo)記“]]>”符號(hào)之間不能包含有空格。
三、XML編碼(Encoding)
XML文檔可以包含非ASCII的字符。例如挪威語(yǔ)、法語(yǔ)之中的符號(hào)。這時(shí)為了避免錯(cuò)誤,應(yīng)該指定XML文檔的編碼,并且以Unicode的方式保存XML文檔。同時(shí)應(yīng)該在XML文檔中使用“encoding”屬性予以說明。
<?xml version="1.0" encoding="UTF-16"?>
XML編碼錯(cuò)誤(Encoding Errors):在加載XML文檔的時(shí)候,常見的XML編碼錯(cuò)誤有兩種:
“An invalid character was found in text content.”
產(chǎn)生原因:XML文檔包括了非ASCII字符,并且文件以單字節(jié)(single-byte)ANSI或ASCII方式保存,而且沒有在XML中指定編碼編碼。
“Switch from current encoding to specified encoding not supported”
產(chǎn)生原因1:XML文檔以雙字節(jié)(double-byte)Unicode或UTF-16的方式保存,但是卻制定了單字節(jié)的編碼方式(如Windows-1252, ISO-8859-1, UTF-8等)。
產(chǎn)生原因2:以單字節(jié)的ANSI或ASCII的方式保存文檔,但卻在XML文件中指定編碼方式為UTF-16。
Windows記事本: 很多時(shí),我們會(huì)用WindowsNotepad編輯XML文檔。這里要注意的是: WindowsNotepad默認(rèn)將文檔以單字節(jié)ANSI(ASCII)的方式保存。 如果要保存為雙字節(jié)的Unicode(UTF-16),則要使用“另存為”保存。
為了避免錯(cuò)誤,關(guān)于XML Encoding的建議是:- 總是在XML中使用encoding屬性。
- 使用一個(gè)支持編碼的編輯器。
- 確認(rèn)你知道編輯器的編碼方式。
- 使你的encoding屬性的值符合編碼。
四、XML 服務(wù)器
和HTML一樣XML文件是純文本。一個(gè)標(biāo)準(zhǔn)的Web服務(wù)器和以很方便的存儲(chǔ)和生成XML文件。所以很多的Web服務(wù)器都有提供操作XML的API。具體各種不同的技術(shù)是如何實(shí)現(xiàn)的,就不能在這里說明了。
五、XML DOM 進(jìn)級(jí)
詳細(xì)的DOM學(xué)習(xí)還是要參考XML DOM指南和手冊(cè)。這里列出常見的操作。獲取元素的值
txt=x.nodeValue;
獲取屬性的值
改變?cè)氐闹?br />
x.nodeValue="Easy Cooking";
改變屬性的值
x=xmlDoc.getElementsByTagName("book");
for(i=0;i<x.length;i++)
{
x[i].setAttribute("edition","first");
}創(chuàng)建一個(gè)元素
newtext=xmlDoc.createTextNode("First");
newel.appendChild(newtext);x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);
移除一個(gè)元素
x.removeChild(x.childNodes[0]);
六、XML要避免的技術(shù)
Internet Explorer XML Data Islands
What is it?
這是一種將XML數(shù)據(jù)嵌入到HTML頁(yè)面的技術(shù)。
Why avoid it?
因?yàn)檫@時(shí)IE的特有技術(shù),其他的Browser不支持。
What to use instead?
應(yīng)該使用JavaScript和XML DOM在HTML中展示XML數(shù)據(jù)。
Internet Explorer Behaviors
What is it?
IE5引入了動(dòng)作的概念(Behaviors)。Behaviors是結(jié)合CSS為XML(或HTML)元素添加動(dòng)作樣式的技術(shù)。
Why avoid it?
只有IE支持
What to use instead?
同樣應(yīng)該使用JavaScript和XML DOM進(jìn)行實(shí)現(xiàn)。
因?yàn)橹改弦呀?jīng)叫我們避免使用這兩種技術(shù),就沒必要深入了解他們了。
七、XML 相關(guān)技術(shù)
下面的連接中列出了XML相關(guān)的技術(shù)。http://www.w3schools.com/xml/xml_technologies.asp八、XML的實(shí)際應(yīng)用
XML News
XMLNews是一種交換新聞和信息的規(guī)范。
XML Weather Service
National Oceanic and Atmospheric Administration是其中一個(gè)天氣服務(wù)的例子。
九、XML編輯器(Editors)
XML是純文本的,所以使用一般的文本編輯器就可以編輯XML了。但是使用一個(gè)專業(yè)的XML編輯器,比使用記事本(Notepad)有更多的優(yōu)點(diǎn)。
為什么不用Notepad?是的大多數(shù)的OS都有Notepad。很容易使用它來進(jìn)行HTML、XML、CSS的編輯。但是請(qǐng)盡量不要使用Notepad,因?yàn)镹otepad并不知道你在編輯的是HTML、XML或CSS文件,它也無法,不會(huì)提供幫助。
為什么使用XML編輯器?專業(yè)的XML編輯器可以更好的保證無錯(cuò)的文檔�?梢愿鶕�(jù)DTD或Schema,保證XML的有效性(Validate)。我們應(yīng)該使用提供以下功能的專業(yè)XML編輯器:
- 能夠自動(dòng)添加閉合標(biāo)記。
- 強(qiáng)制你寫有效XML。
- 能根據(jù)DTD或Schema驗(yàn)證XML。
- 為你的XML按照語(yǔ)法添加顏色區(qū)別。
十、下一步應(yīng)該學(xué)習(xí)什么?
下一步的學(xué)習(xí)應(yīng)該是XML DOM和XSLT。如果你比較關(guān)心XML的有效性驗(yàn)證,那么可以學(xué)習(xí)DTD和Schema。
分享:XML學(xué)習(xí)筆記(四)Schema介紹篇Preface:本文是W3CSchools上《Schema指南》的學(xué)習(xí)筆記。其中大部分內(nèi)容是對(duì)指南的翻譯總結(jié)。由于原文的例子更詳盡生動(dòng),如果各位想閱讀原文可以到這個(gè)網(wǎng)址http://www.w3schools.com/schema/default.asp。 同時(shí),W3CSchools提供了測(cè)試,大家可以測(cè)試一下自己
- xml創(chuàng)建節(jié)點(diǎn)(根節(jié)點(diǎn)、子節(jié)點(diǎn))
- WML開發(fā)教程之 WAP網(wǎng)站服務(wù)器配置方法
- WMLScript的語(yǔ)法基礎(chǔ)
- 收集的WML Script標(biāo)準(zhǔn)函數(shù)庫(kù)
- WML教程之文本框控件Input
- 無線標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)
- xml文件的結(jié)構(gòu)解讀
- 關(guān)于XSL - XSL教程
- 選擇模式 - XSL教程 - 2
- XPath入門 - XSL教程 - 3
- 匹配模式 - XSL教程 - 4
- 測(cè)試模式 - XSL教程 - 5
- 相關(guān)鏈接:
- 教程說明:
Xml教程-XML學(xué)習(xí)筆記(三)進(jìn)階篇
。