JavaScript JavaScript与XML——“XML DOM”的注重要点

DOM2级中心

docuent.implementation中引入了createDocument()要领,IE9支撑该要领,如:

var xmldom = document.implementation.createDocument(namespaceUri, root, doctype);

一般来说只用传第二个参数即可:

var xmldom = document.implementation.createDocument("", "root", null);

建立一个新的、文档元素为root的XML文档,能够运用下面代码:

var xmldom = document.implementation.createDocument("", "root", null); 定名空间URI为空字符示意未指定定名空间,给文档范例传入null即不指定文档范例。
console.log(xmldom.documentElement.tagName); //"root"

var child = xmldom.createElement("child");
xmldom.documentElement.appendChild(child);

DOMParser范例

Firefox、Opera、Chrome、Safari支撑(IE8不支撑),

  • DOMParse范例可将XML剖析为DOM文档。

建立一个DOMParse实例,再挪用

  • parseFromString()要领。这个要领接收两个参数:要剖析的XML字符串和内容范例(内容范例一直为”text/xml”)。返回值是一个Document实例。

如:

var parser = new DOMParse();
var xmldom = parser.parseFromString("<root><child/></root>", "text/xml");

alert(xmldom.documentElement.tagName); //"root"
alert(xmldom.documentElement.firstChild.tagName); //"child"
var anotherChild = xmldom.createElement("child");
xmldom.documentElement.appendChild(anthorChild);
var children = xmldom.getElementsByTagName("child");
alert(children.length); //2

发作剖析毛病时,仍然会从parseFromString()中返回一个Document对象。但这个对象的文档元素是

  • <parsererror>(Firefox、Opera);对象根元素第一个子元素为<parsererro>(Safari、Chrome)。

parseerror元素的内容是对剖析毛病地形貌。经由过程getElementsByTagName()查找parsererror肯定是不是有剖析毛病。

var parser = new DOMParser(),
    xmldom,
    errors;
try {
    xmldom = parser.parseFromString("<root>", "text/xml"); //这里少了一个闭标签</root>
    errors = xmldom.getElementsByTagName("parsererror");
    if (errors.length > 0) {
        throw new Error("Parsing error!");
    }
} catch (ex) {
    console.log(ex.message); //Parsing error!
}

XMLSerializer范例

此类可将DOM文档序列化为XML字符串。(IE6~8不支撑)。

要序列化DOM文档,宰衡必需建立XMLSerializer实例,然后将文档传入其serializerToString()要领:

var xmldom = document.implementation.createDocument("", "root", null);
xmldom.documentElement.appendChild(xmldom.createElement("child"));

var serializer = new XMLSerializer();
var xml = serializer.serializeToString(xmldom);

console.log(xml); //<root><child/></root>

IE8之前版本中的XML

(略)

虽然能够经由过程XML DOM文档对象加载XML文件,但公认的照样运用XMLHttpRequest对象比较好。

跨浏览器处置惩罚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 > 0) {
            throw new Error("XML parsing error: " + errors[0].textContent);
        }
    } else if (typeof ActiveXObjext != "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

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.");
    }
}
    原文作者:JS菌
    原文地址: https://segmentfault.com/a/1190000004452647
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞