functiontestXml(){varobjXml=newActiveXObject('MSXML2.DOMDocument');varstrXml="abcd";objXml.setProperty("SelectionLanguage","XPath");objXml.loadXML(strXml);varobjaa=objXml" />

selectSingleNode方法中,用[0]还是[1]来选第一

系统 1621 0
    今天写了这样一段代码:
< script language = " javascript " >
   
function  testXml()
   
{
      
var  objXml  =   new  ActiveXObject('MSXML2.DOMDocument');
      
var  strXml  = " <xml><aa>abcd</aa></xml> " ;
      objXml.setProperty(
" SelectionLanguage " , " XPath " );
     
      objXml.loadXML(strXml);
      
var  objaa  =  objXml.selectSingleNode( " xml/aa[0] " );
      alert(objaa.text);
   }

   testXml();
</ script >
   系统抛出异常,未找到对象。也就是objXml.selectSingleNode("xml/aa[0]");返回的是null。"xml/aa[0]"是如此简单的表达式,错误只有可能出在"[0]"上。查阅了一些资料后,将objXml.selectSingleNode("xml/aa[0]");修改成objXml.selectSingleNode("xml/aa[1]"),运行通过成功找到了节点。原来Xpath中节点计数是从1开始的。
    也许事情不是这样简单,我曾经隐约记得写过objXml.selectSingleNode("xml/aa[0]")这样的代码,并且也能正确的找到节点。我将代码进行了以下修改:
< script language = " javascript " >
   
function  testXml()
   
{
      
var  objXml  =   new  ActiveXObject('MSXML2.DOMDocument');
      
var  strXml  = " <xml><aa>abcd</aa></xml> " ;
      
// objXml.setProperty("SelectionLanguage","XPath");不再采用Xpath方式
     
      objXml.loadXML(strXml);
      
var  objaa  =  objXml.selectSingleNode( " xml/aa[1] " );
      alert(objaa.text);
   }

   testXml();
</ script >
     系统抛出异常,提示未找到对象。难道非Xpath方式选取节点,节点计数是从0开始的?我将objXml.selectSingleNode("xml/aa[1]")修改成objXml.selectSingleNode("xml/aa[0]"),代码成功运行,并且找到节点。
    由此我们不难看出,非Xpath方式选取节点时,第一个节点用[0]来标示;而用Xpath方式选取节点时,第一个节点用[1]来标示。注意,只有在MSXML2.DOMDocument 4.0以下版本才默认采用非Xpath方式选取节点,即类似正则表达式的方式选取。
     为什么会造成这种情况呢?也许是当年微软设计该组件的时候Xpath标准还没有正式出台,也或者是Xpath标准没有兼顾微软以前的设计,出现了最不应该出现的不兼容性。

selectSingleNode方法中,用[0]还是[1]来选第一个匹配节点呢?


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论