javascript跨浏览器DOMParser()解析XML数据再用dom方法调用节点,XMLSerializer()将dom结构数据序列化

//这是IE创建ActiveXObject对象,方便后面解析xml文件
 function createDocument()
            {
                if(typeof arguments.callee.activeXString!="string")
                {
                    var versions=["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument"],i,len;
                    for(i=0,len=versions.length;i<len;i++)
                    {
                        try{
                            new ActiveXObject(versions[i]);
                            arguments.callee.activeXString=versions[i];
                            break;
                        }catch(er)
                        {
                            alert("创建IE文档出错");
                        }
                    }
                }
                return new ActiveXObject(arguments.callee.activeXString);
            }

            /*
            //这里是异步加载外部xml文件,然后可以分析dom结构
            var xmldom=createDocument();
            xmldom.async=true;

            xmldom.onreadystatechange=function(){
                if(xmldom.readyState==4)
                {
                    if(xmldom.parseError!=0)
                    {
                        console.log("An error occurred:\nError COde: "
                            + xmldom.parseError.errorCode+"\n"
                            +"Line: "+xmldom.parseError.line+"\n"
                            +"Line Pos: "+xmldom.parseError.linepos+"\n"
                            +"Reason: "+xmldom.parseError.reason);
                    }else
                    {
                        console.log(xmldom.documentElement.firstChild.firstChild.data);
                    }
                }
            };
            xmldom.load("xmltest.xml");
            */
	//跨浏览器解析xml文件
            function parseXml(xml)
            {
                var xmldom=null;
                if(typeof DOMParser !="undefined")
                {
                    xmldom=(new DOMParser()).parseFromString(xml,"text/xml");

                    var errors=xmldom.getElementsByTagName("parsererror");
                    if(errors.length)
                    {
                        throw new Error("XML parsing error: "+errors[0].textContent);
                    }
                }else if(typeof ActiveXObject !="undefined")
                {
                    xmldom=createDocument();
                    xmldom.loadXML(xml);
                    if(xmldom.parseError !=0)
                    {
                        throw new Error("XML parsing error: "+ xmldom.parseError.reason);
                    }
                }else
                {
                    throw new Error("no XML parser available.");
                }
                return xmldom;
            }
	//跨浏览器序列化dom文件,变成xml格式
            function serializeXml(xmldom)
            {
                if(typeof XMLSerializer !="undefined")
                {
                    return (new XMLSerializer()).serializeToString(xmldom);
                }else if(typeof xmldom.xml !="undefined")
                {
                    return xmldom.xml;
                }else 
                {
                    throw new Error("could not serialize XML DOM.");
                }
            }
	//测试
            var xm=null
            try{
                xm=parseXml("子节点");
                document.write(serializeXml(xm));
            }catch(e)
            {
                alert(e.message);
            }

你可能感兴趣的:(javascript学习日记,javascript,xml,前端)