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.");
}
}