function getXMLDOM(xmlStr){
var xmlDom=null;
if(typeof window.DOMParser !='undefined'){
xmlDom=(new DOMParser).parseFromString(xmlStr,'text/xml');
var errors=xmlDom.getElementsByTagName('parsererror');
if(errors.length>0){
// alert(xmlDom)
throw new Error('错误:'+errors[0].textContent);
}
}else if(typeof window.ActiveXObject !="undefined"){
var varsion=[
"MSXML2.DOMDocument6.0",
"MSXML2.DOMDocument3.0",
"MSXML2.DOMDocument"
];
for(var i=0;i<varsion.length;i++){
try{
var xmlDom=new ActiveXObject(varsion[i]);
}catch(e){
//跳过
}
}
xmlDom.loadXML(xmlStr);
if(xmlDom.parseError !=0){
throw new Error("错误信息:"+xmlDom.parseError.reason);
}
return xmlDom;
}else{
throw new Error("您的系统或浏览器不支持XML DOM对象");
}
return xmlDom;
}
//序列化XML
function serializerXML(xmlDom){
var xml=null;
if(typeof window.XMLSerializer !='undefined'){
xml=(new XMLSerializer()).serializeToString(xmlDom);
}else if(typeof xmlDom.xml !='undefined'){
xml=xmlDom.xml;
}
return xml;
}
var xmlStr="<root><user id='5'>Lee</user><user id='6'>ko</user></root>";
var xmlDom=getXMLDOM(xmlStr);
var result = xmlDom.evaluate('root/user',xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
//evaluate()的第二个参数是上下文节点,我看李彦辉视频中直接是写一个xmlDom,如上。但在js高级程序设计上是写 xmlDom.documentElement 。但是后者执行时候是报错的。
// TypeError: Argument 1 of XMLSerializer.serializeToString is not an object.
//如果我要把第二个参数写成xmlDom.documentElement,要在哪里做改动。
alert(serializerXML(result.iterateNext()))
var result = xmlDom.evaluate('user', xmlDom.documentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
如果用xmlDom.documentElement 你相当于取到了root元素,所以XPath要改变
update:
可以参考 http://www.w3school.com.cn/xmldom/prop_document_documentelement.asp
documentElement 属性可返回文档的根节点。