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(" ", "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对象。但这个对象的文档元素是
(Firefox、Opera);对象根元素第一个子元素为
(Safari、Chrome)。
parseerror元素的内容是对解析错误地描述。通过getElementsByTagName()查找parsererror确定是否有解析错误。
var parser = new DOMParser(),
xmldom,
errors;
try {
xmldom = parser.parseFromString("", "text/xml"); //这里少了一个闭标签
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); //
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.");
}
}