javascript - 关于XPath的问题。

查看:84
本文介绍了javascript - 关于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 属性可返回文档的根节点。

这篇关于javascript - 关于XPath的问题。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆