XML是保存数据的一种格式,方便javascript的解析和应用.例如ajax中,x就是XML的代表.在ajax中,还有json,csv等保存格式.
xml文档的创建
可以使用DOM级别2的document.implementation.createDocument()方法在FireFox等相关的浏览器上创建一个空的xml文档.可以使用名为MSXML2.DOMDocument的ActiveX对象在IE中完成文档的创建.
xml创建的示例代码:
XML.newDocument=function(rootTagName,namespaceURL){
if(!rootTagName)rootTagName="";
if(!namespaceURL)namespaceURL="";
if(document.implementation&&document.implementation.createDocument){
return document.implementation.createDocument(namespaceURL,rootTagName,null);
}else{
var doc=new ActiveXObject("MSXML2.DOMDocument");
if(rootTagName){
var prefix="";
var tagname=rootTagName;
var p=rootTagName.indexof(":");
if(p!=-1){
prefix=rootTagName..substring(0,p);
tagname=rootTagName.substring(p+1);
}
if(namespaceURL){
if(!prefix)prefix="a0";
}else prefix="" ;
var text="<"+(prefix?(prefix+":"):"")+tagname+(namespaceURL?(" xmlns:"+ predix+ '="'+namespaceURL+'"'):"")+">";
doc.loadXML(text);
}
return doc;
}
};
也可以从网络上加载一个文档
同步载入示例:
XML.load=function(url){
var xmldoc=XML.newDocument();
xmldoc.async=false;
xmldoc.load(url);
return xmldoc;
}
异步载入示例:
XML.loadAsync=function(url){
var xmldoc=XML.newDocument();
if(document.implementation&&document.implementation.createDocument){
xmldoc.onload=function(){ callback(xmldoc);};
}else{
xmldoc.onreadystatechange=function(){ if(xmldoc.readyState==4)callback(xmldoc);};
}
xmldoc.load(url);
}
XML文档的解析
XML.parse=function(text){
if(typeof DOMParser !="undefined"){
return (new DOMParser()).parseFromString(text,"application/xml");
}else if(typeof ActiveXObject!="undefined"){
var doc=XML.newDocument();
doc.loadXML(text);
return doc;
}else{
var url="data:text/xml;charset=utf-8,"+encodeURIComponent(text);
var request=createRequest();
request.open("GET",url,false);
request.send(null);
return request.responseXML;
}
}
在浏览器中使用XML文档,需要使用javascript来解析,来规避掉HTML的兼容性问题,而不要直接使用.
用DOM API来操作XML
HTML是XML的一种,HTML可以使用DOM的方式操作,XML的结构域HTML是一样的,也可以用DOM的API操作.HTML DOM和XML的DOM最主要的区别可能就是getElementById()方法对XML无效.属性类型在一个文档的DTD中声明,而一个文档的DTD在DOCTYPE声明中指定.web应用程序中使用的XML文档通常没有DOCTYPE声明来指定一个DTD,所以在这个文档上使用getElementById总返回null.但是getElementsByTagName却能够工作的很好.总之,还是要注意HTML与XML的区别.