XML学习笔记
一.XML的作用
1. Xml是一种可扩展标记语言用来传输和存储数据,而不是用来显示数据。
2. 使用xml将数据从html中分离出来形成一种数据传输的对象。
3. Xml简化了数据共享,在真实世界中计算机系统和数据使用不兼容的格式来输出数据。Xml数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方式。
4. Xml数据以文本格式存储,这使得xml在不损失数据的情况下,更容易和扩展新的操作系统、新的应用程序或新的浏览器。
5. 使用xml创建的internet语言
XHTML – 最新的HTML版本。
WSDL – 用于描述可用的Web service。
WAP和WML – 用于手持设备的标记语言。
RSS – 用于RSS feed的语言。
RDF和OWL – 用于描述资源和本体。
SMIL – 用于描述针对Web的多媒体。
二.xml语法规则
1.所有xml元素都必须有关闭标签。
2.Xml标签对大小写敏感。
3.xml必须要正确的嵌套。
4.xml必须要有根元素。
5.xml的属性值须加引号。
6.实体引用:在xml文档中有5类实体引用,&It; 小于号(<),> 大于号(>),& 和号(&),' 单引号(’)," (“)。
7.xml中的注释 <!-- -->和HTML很相似。
8.Xml中空格会被保留。多个空格会被当成一个使用。
9. XML以LF来存储换行。
10.XML的命名规则:避免使用“-”字符。避免使用“.”。避免“ :”字符。
11.XML的优势之一,就是可以经常在不中断应用程序的情况下进行扩展。
三.xml属性
1.属性必须加引号,如果属性本身值就带有引号,那么有必要使用单引号包围它,或者只用转义字符去做。
2.在XML中如果是用作记录数据的话那么应该尽量避免使用属性,但是如果需要记录数据的状态的话那么需要使用属性。用一句很经典的话来形容:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
四.XML解析器
大多数浏览器都有读取和操作xml的内建XML解析器。解析器吧XML转换为JavaScript可访问的对象。那就是说我们的一些配置信息可以使用XML来进行处理并且让javaScript来做出相应。虽然各个浏览器的XML解析器各不相同,但是他们都包含有以下几个解析XML必备的方法,遍历XML树、访问插入及删除节点(元素)及其属性的函数。
在IE中将一个XML文档使用javaScript来把文档加载入解析器中。
var xmlDoc = new ActiveXObject(“Microsoft.XMLDOM”);//创建一个XML对象
xmlDoc.async=”false”;//关闭异步加载,确保在文档加载完毕前解析器不会继续脚本的执行。
xmlDoc.load(“note.xml”);//加载XML文件。
xmlDoc.LoadXML(txt);//用于加载字符串文本。
在Firefox及其他浏览器中的XML解析器。
var parser = new DOMParser();
var doc = parser.parseFromString(txt,”text/xml”);
现代浏览器都不允许跨域访问,这意味着,网页以及它试图加载的xml文件,都必须位于相同的服务器上。
五.xml样式表语言
1.使用CSS可以去为XML创建样式。如果要为XML添加一个css样式那么<?xml-stylesheet type=”text/css” href=”cd_catalog.css”?>
2.如果要给xml文档加样式那么首选XSLT(extensible Stylesheet Language Transformations),远比CSS更加完善。如果要为一个XML添加一个XSLT那么需要使用如下的代码<?xml-stylesheet type=”text/xsl” href=”simple.xsl”?>
六 XML DOM
DOM(Document Object Model ,文档对象模型)定义访问和操作文档的一套标准方法。
解析 XML 文件 - 跨浏览器实例
下列代码把一个 XML 文档 ("note.xml") 载入 XML 解析器中:
<html>
<head>
<script type="text/javascript">
function parseXML()
{
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
xmlDoc=document.implementation.createDocument("","",null);
}
catch(e)
{
alert(e.message);
return;
}
}
xmlDoc.async=false;
xmlDoc.load("note.xml");
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
}
</script>
</head>
<body οnlοad="parseXML()">
<h1>W3School.com.cn Internal Note</h1>
<p><b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</p>
</body>
</html>
输出:
W3School.com.cn Internal Note
To: George
From: John
Message: Don't forget the meeting!
TIY
重要注释
如需从 XML 中提取文本 "John",语法是:
getElementsByTagName("from")[0].childNodes[0].nodeValue
在这个 XML 例子中,只有一个 <from> 标签中,但是仍然需要规定数组的下标 [0],这是因为 XML 解析器方法 getElementsByTagName() 返回所有 <from> 节点的一个数组。
解析 XML 字符串 - 跨浏览器实例
下面的代码加载并解析一个 XML 字符串:
<html>
<head>
<script type="text/javascript">
function parseXML()
{
text="<note>";
text=text+"<to>George</to>";
text=text+"<from>John</from>";
text=text+"<heading>Reminder</heading>";
text=text+"<body>Don't forget the meeting!</body>";
text=text+"</note>";
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
catch(e)
{
try // Firefox, Mozilla, Opera, etc.
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,"text/xml");
}
catch(e)
{
alert(e.message);
return;
}
}
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
}
</script>
</head>
<body οnlοad="parseXML()">
<h1>W3School.com.cn Internal Note</h1>
<p><b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</p>
</body>
</html>
输出:
W3School.com.cn Internal Note
To: George
From: John
Message: Don't forget the meeting!
最后练习:
1. 将一个xml文档使用javaScript加载到内存当中并且使用HTML去进行显示,要适用于IE和火狐等浏览器。
2. 将一个文本xml文档使用javaScript加载到内存中并且使用HTML去进行显示,要适用于IE火狐等浏览器。
3. 将CD机的XML文档变成HTML文档。
七.XMLHttpRequest
1.作用:这个对象是所有开发人员的梦想他可以1.在不刷新页面的情况下更新数据2.页面已经加载后从服务器请求数据。3. 页面已经加载后从服务器接收数据。4.在后台向服务器发送数据。
2.使用在所有现代的浏览器中(包含IE7)都使用这种方法去创建一个XMLRequest对象
xml = new XMLHttpRequest();在IE 5和6中:
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
根据不同的浏览器做出一个综合的判断去确定是那个浏览器。
<script type=”text/javascript”>
var xmlhttp;
function loadXMLDoc(url){
xmlhttp=null;
if(window.XMLHTTPRequest){
xmlhttp = new XMLHTTPRequest();
}else if(window.ActiveXObject){
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
if(xmlhttp!=null){
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open(“GET”,url,true);
xmlhttp.send(null);
}else{
alert(“浏览器不支持XMLHTTPRequest对象”);
}
}
function state_Change(){
if(xmlhttp.readystate==4){
if(xmlhttp.status=200){
}
}
}
</script>
八.xml的命名空间
使用命名空间的作用是防止命名冲突。
概念:统一资源提示符(Uniform Resource Identifier(URI))
统一资源提示符是一串可以标示因特网资源的字符。最常用的URI是用来标示因特网域名地址的统一资源定位器(URL)。另一个不那么常用的URI是统一资源命名(URN)。
命名空间的语法:
xmlns:namespace-prefix=”namespaceURI”.
例如:<f:table xmlns:f=” http://www.w3school.com.cn/furniture”>
如果你为某个元素制定了默认的命名空间那么将省去在所有命名空间中使用前缀的麻烦,例如:
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
九:xml CDATA:所有xml文档中的文本均会被解析器解析。
CDATA的语法
<script>
<![CDATA[
内部是代码
]]>
</script>
注:CDATA不能嵌套
九.xml的命名空间
载入XML可能会引发2种错误,
1. 在文本内容中发现非法字符
如果 XML 文档中的某个字符与编码属性不匹配,您就会得到这个错误消息。通常,当 XML 文件中含有外国字符,且当文件使用类似记事本的单字节编码编辑器保存,以及没有指定编码属性时,您就会得到这个错误消息。
2. 将当前编码切换为不被支持的指定编码
如果您的文件被保存为 Unicode/UTF-16,但是编码属性被指定为单字节编码(比如 Windows-1252、ISO-8859-1 或者 UTF-8)时,那么您就会得到这个错误消息。或者当您的文档被保存为单字节编码,但编码属性被指定为双字节编码(比如 UTF-16)时,也会得到这个错误消息。