以下是对XML基本的总结
初识
http://www.ki4.cn/
基本
http://www.ki4.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 "Shotgun" 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 则是一个子元素。两个例子都可供应雷同的信息。
没有什么礼貌可以通知我们什么时候该运用属性,而什么时候该运用子元素。我的履历是在 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 语法划定规矩:
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) 的语法划定规矩:
<?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.ki4.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 范例声明:假如 XML 文档存在毛病,那末顺序就不应该继承处置惩罚这个文档。理由是,XML 软件应该轻盈,疾速,具有优越的兼容性。
假如运用 HTML,建立包括大批毛病的文档是有可以的(比方你遗忘了完毕标签)。个中一个重要的原因是 HTML 浏览器相称痴肥,兼容性也很差,而且它们有本身的体式格局来确定当发明毛病时文档应该显现为何模样。
运用 XML 时,这类状况不应该存在。
对您的 XML 举行语法搜检 - 仅用于 IE 浏览器
为了协助您对 XML 举行语法搜检,我们建立了一个 XML 考证器。
把您的 XML 粘贴到下面的文本框中,然后点击"考证"按钮来举行语法搜检。
依据 DTD 来考证 XML
只要把 DOCTYPE 声明增加到您的 XML 中,然后点击考证按钮即可:
诠释:只要在 Internet Explorer 中,可以依据 DTD 来考证 XML。Firefox, Mozilla, Netscape 以及 Opera 做不到这一点。
怎样将XML显现在Html上:
实例
从 XML 文件中加载数据,然后把数据显现为一个 HTML 表格
在 HTML 中显现数据
在上一节中,我们解说了怎样经由过程 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>
例子诠释:
检测浏览器,然后运用适宜的剖析器来加载 XML
建立一个 HTML 表格(<table border="1">)
运用 getElementsByTagName() 来取得一切 XML 的 CD 节点
针对每一个 CD 节点,把 ARTIST 和 TITLE 中的数据显现为表格数据
用 </table> 完毕表格
XMLHttpRequest
什么是 XMLHttpRequest 对象?
XMLHttpRequest 对象是开发者的妄想,由于您可以:
在不从新加载页面的状况下更新网页
在页面已加载后从服务器要求数据
在页面已加载后从服务器吸收数据
在背景向服务器发送数据
一切当代的浏览器都支撑 XMLHttpRequest 对象。
实例:当键入文本时与服务器举行 XML HTTP 通讯。
建立 XMLHttpRequest 对象
经由过程一行简朴的 JavaScript 代码,我们就可以建立 XMLHttpRequest 对象。
在一切当代浏览器中(包括 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 对象的状况发作转变时,会触发此函数。状况从 0 (uninitialized) 到 4 (complete) 举行变化。仅在状况为 4 时,我们才实行代码。
为何运用 Async=true ?
我们的实例在 open() 的第三个参数中运用了 "true"。
该参数划定要求是不是异步处置惩罚。
True 示意剧本会在 send() 要领以后继承实行,而不守候来自服务器的相应。
onreadystatechange 事宜使代码庞杂化了。然则这是在没有获得服务器相应的状况下,防备代码住手的最平安的要领。
经由过程把该参数设置为 "false",可以省去分外的 onreadystatechange 代码。假如在要求失利时是不是实行其他的代码可有可无,那末可以运用这个参数。
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 剖析器那一节中雷同的代码:
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");
在本代码实行后,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 元素,会建立一个表格行。每一个表格行包括两个表格数据单位,个中的数据来自当前 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 元素中的数据。为了导航到数据的下一行,必需增加更多的代码。
增加导航剧本
为了向上例增加导航(功用),须要建立 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进修笔记(6)-----------XML拓展的内容,更多相关内容请关注ki4网(www.ki4.cn)!