首页 > 关于XPath的问题。

关于XPath的问题。

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 属性可返回文档的根节点。

【热门文章】
【热门文章】