首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

4.2.5  使用命名空间解析器

evaluate()方法的语法中,你将看到一个对命名空间解析器的引用。命名空间解析器(namespace resolver是一个将XPath表达式中命名空间前缀解析成命名空间URI的函数。该命名空间解析器函数可以由你自行命名,但是要求传入一个字符串参数(需要解析的前缀)。

解析器对参数所提供的前缀进行检查,并返回相关的命名空间URI。为了在IE示例中使用命名空间URI,可以编写下列的解析器:

function nsResolver(sPrefix) {

    switch (sPrefix) {

       case "na":

           return "http://site1.com";

           break;

       case "pub":

           return "http://site2.com";

           break;

       default:

           return null;

           break;

    }

}

有了上面的解析器,那么就可以在IE命名空间示例中对修改后的books.xml文档使用下列XPath表达式:

var sXPath = "na:book/pub:name";

 

var oEvaluator = new XPathEvaluator();

 

var oResult = oEvaluator.evaluate(sXPath,oXmlDom.documentElement,nsResolver,

       XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

 

 

var aNodes = new Array;

 

if (oResult != null) {

    var oElement;

    while (oElement = oResult.iterateNext()) {

        aNodes.push(oElement);

    }

}

该示例与上一段计算表达式的代码类似。不过,请注意对evaluate()方法的补充:之前编写的nsResolver()函数的指针,作为参数传入evaluate()方法来处理XPath表达式的命名空间。其余部分应该相当熟悉了。使用XPathResult类的iterateNext()方法遍历返回结果NodeList,并转换成数组。

正如你所见,FirefoxXPath实现与微软提供的方法有很大的不同,因此使用一个跨浏览器兼容的库会使得执行XPath计算更加简单。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论