• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

HYP AND HAPPY

快快乐乐编程
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

    今天写了这样一段代码:
<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标准没有兼顾微软以前的设计,出现了最不应该出现的不兼容性。

posted on 2005-11-02 08:51  hyphapy  阅读(2516)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3