【javascript学习指南】JavaScript将XML DOM与XML 字符串相互转化

更新时间:2019-05-13    来源:Dom教程    手机版     字体:

【www.bbyears.com--Dom教程】

将XML字符串解析成XML DOM对象的方法。

 代码如下

    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(document.implementation.hasFeature("LS", "3.0")) {
            var implementation =  document.implementation;
            var parser = implementaion.createLSParser(implementation.MODE_SYNCHRONOUS, null);
            var input = implementation.createLSInput();
            input.stringData = xml;
            xmldom = parser.parse(input);
        } 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;
    }

在使用这个函数解析XML字符串时,应该将它放在try-catch语句当中,以防发生错误。来看下面的例子:

 代码如下

    
        var xmldom = null;
        try{
            xmldom = parseXml("hello world");
        } catch (ex) {
            console.log(ex.message);
        }

将XML DOM对象序列化成XML字符串的方法。

 代码如下

    function serializeXml (xmldom) {
        if (typeof XMLSerializer != "undefined") {
            return (new XMLSerializer()).serializeToString(xmldom);
        } else if (document.implementation.hasFeature("LS", "3.0")) {
            var implementation = document.implementation;
            var serializer = implementation.createLSSerializer();
            return serializer.writeToString(xmldom);
        } else if (typeof xmldom.xml != "undefined") {
            return xmldom.xml;
        } else {
            throw new Error("Could not serialize XML DOM.");
        }
    }

一般来说,只要针对浏览器使用了适当的XML DOM对象,就不会出现无法序列化的情况,因而也就没有必要在try-catch语句中调用serializeXml()。结果,就只需如下一行代码即可:

 代码如下


    var xml = serializeXml(xmldom);

本文来源:http://www.bbyears.com/wangyezhizuo/50796.html