xml的基本操作
1 JS装载xml文档,是将xml的字符串装载成dom对象2 Dom操作XML
3浏览器处理空白信息的差异
4 dom对象序列化xml字符串
将xml文档装载成dom对象
装载xml文档
html文档中的js
function test(){
vardomxml1=loadXML(true,"loadXML.xml");
vardomxml2=loadXML(false,"124");
alert("");
}
loadXML.JS中的函数
*封装IE和Fire浏览器中装载同域XML文件或xml字符串的方法,返回的是xml文档对应的dom对象中的根节点
* @parma flag true 表示装载ml文件, flas表示装载失败
* @ oaram xmldoc flag 为true 表示xml文件路径falg为false表示xml字符串
*/
function loadXML(flag,xmldoc){
if(window.ActiveXObject){
//IE浏览器装载xml对象
varactiveName=["MSXM2.DOMDocument","Miscrosoft.XmlDom"];
var xmlObj;
for(var i=0;i
try {
//创建成功,返回
xmlObj=newActiveXObject(activeName[i]);
break;
} catch (e) {
}
}
if(xmlObj){
//同步方式装载xml数据
xmlObj.async=false;
if(flag){
//装载xml文件
xmlObj.load(xmldoc);
}else
{
//装载xml字符串
xmlObj.loadXML(xmldoc);
}
//返回整个xml文档根节点
// return xmlObj;
//返回根元素节点元素
return xmlObj.documentElement;
}else{
alert("创建失败xml");
return null;
}
}
//判断是否为IE的元素
else if(document.implementation.createDocument){
//针对firefox获取浏览器
var xmlObj;
if(flag){
//装载xml文件
//创建了空的dom对象 xmlObj=document.implementation.createDocument("","",null);
xmlObj.async=false;//同步方式装载
xmlObj.load(xmldoc);
return xmlObj.documentElement;
}else{
alert("失败")
return null;
}
} else{
//装载XML字符串
//创建dom解析器
xmlObj=new DOMParaser();
vardocRoot=xmlObj.parseFormString(xmldoc,"text/xml");
return docRoot.documentElement;
}
alret("失败");
return null;
}
浏览器处理空白信息的差异
解决方法是:移除所有空白信息,保证IE和FireFox下的dom树结构相同。
function removeBlack(doc){
if(doc.childNodes.lenght>1){
for(varloopindes=0;loopindes
{
varcurrentNode=doc.childNodes[loopindes];
if(currentNode.nodeType==1){
removeBlack(currentNode);
}
if(((/^\s+$/test(currentNode.nodeValue)))&&(currentNode.nodeType==3)){
doc.removeChild(doc.childNodes[loopIndex--]);
}
}
}
}
将dom序列为成表示xml的字符串
IE方式:dom对象上有个xml属性,可以获得对象所有对应的xml字符串
FifeFox:新建XLMSerializer对象,使用serializeToStringdom对象转为xml字符串
//封装不同浏览器dom序列化字符串
function serizDom(xmldoc){
if(xmldoc.xml){
//IE
return xmldoc.xml;
}//火狐
else if(window.XMLSerializer){
var seriz=new XMLSerializer();
returnseriz.serizlizeToString(xmldoc);
}
return null;
}
通过以上几个基本步骤,我们了解到,对于xml的操作,首先是进行装载,然后将其序列化为dom对象,显示在html页面中。而在装载中有不同的浏览器差异,这种方式和创建xmlhttpRequest对象基本是类似的,所以又是学习的相同之处。装载完成就是处理,对空白信息进行处理,而操作中,增删中用到getElementByID获取解析xml方法并不是很好,更好的方式是XPath技术这个还请大家自己查看学习。