当创建的Dom文档放进了XML内容,那么就可以像对Dom进行交互一样使用所有的方法和属性
如果直接访问一个对象会调用它的valueof方法,如xmldom.parseError
对onreadystatechange事件的函数赋值一定要在调用load()之前,确保函数能够及时被触发调用,同时需要注意的是,在事件处理函数里面,不能使用this指向本身(而是使用该XML 文档变量),ActiveX 对象不允许使用this出于安全考虑。
跨浏览器解析XML为Dom object函数:
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 (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;
}
function createDocument(){ //针对ie
if (typeof arguments.callee.activeXString != “string”){ //把信息存储到该函数对象里arguments.callee
var versions = [“MSXML2.DOMDocument.6.0”, “MSXML2.DOMDocument.3.0”,“MSXML2.DOMDocument”],
i, len;
for (i=0,len=versions.length; i < len; i++){
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (ex){
//skip
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}
使用方法:
var xmldom = null;
try {
xmldom = parseXml(“<root><child/></root>”);
} catch (ex){
alert(ex.message);
}
//further processing
把Dom对象转化为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.”);}
}