【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);