2016-05-05

XPath是JavaScript 中节点查找手段,ie9以后的版本才支持w3c标准,其他浏览器基本支持。在e8之前的浏览器,通过基于 activeX的xml dom对象实现。

为了便于测试先写出两个将xml字符串解析和将xml对象序列化的函数:

//解析xml字符串
function parseXML(xmlstr){
var doParse=new DOMParser();
var xmlDom=doParse.parseFromString(xmlStr,'text/xml');
return xmlDom; }
//序列化字符串
function serializeXML(xmlDom){
var ser=new XMLSerializer();
var serString=ser.serializeToString(xmlDom);
return serString;
}

在ie9之前的浏览器中,实现xpath方法如下

对于获取单个节点

//获取单个节点
var node=xmlDom.selectSingleNode('root/user');
//用//可以忽略节点层次直接获取某个名称节点
//var node=xmlDom.selectSingleNode('//user[1]/text()');
//用/只能找到直系儿子,用//可以找到任意层次的后代,
//var node=xmlDom.selectSingleNode('root//user[1]/text()');
//id获取某个节点
//var //node=xmlDom.selectSingleNode('root//user[@id=6]');
//获取同级第二个节点的文本
var node=xmlDom.selectSingleNode('root/user[1]/text()');
alert(serializeXML(node));

这个xml dom节点是上下文对象,节点默认指向root前,如果变动了节点指针位置,必须和路径相互配合好,不然会出错!!!

获取多个节点

var node=xmlDom.selectNodes('root/user');
alert(node.length);

标准w3c两种创建xml dom方法,利用两个对象XpathResult XpathEvaluator

//用第一种方法利用XPATHEVALUATOR XPathResult对象创建单一节点

var eva=new XPathEvaluator();

var result=eva.evaluate('root/user',xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);

alert(serializeXML(result));

//第二种方法创建多个节点即不用new 出XPathEvaluator 对象

var result1=xmlDom.evaluate('root/user',xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);

//创建一个节点数组存放多个节点
if(result1!=null)
{


var nodes=[];
var node=result1.iterateNext();
while(node!==null)
{
nodes.push(node);
node=result1.iterateNext();
}
}
alert(parseXML(nodes[1]));


);
 

XPath 初步讲解的更多相关文章

  1. xpath详细讲解

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  2. yii2初步讲解 验证规则

    http://www.yii-china.com/post/detail/9.html

  3. 全方面讲解TensorFlow

    任何曾经试图在 Python 中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦.编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更 ...

  4. ContentProvider数据库共享之——实例讲解

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/harvic880925/article/details/44591631 前言:现在这段时间没这 ...

  5. MySQL/RDS数据如何同步到MaxCompute之实践讲解

    摘要:大数据计算服务(MaxCompute,原名ODPS)是阿里云提供的一种快速.完全托管的EB级数据仓库解决方案.本文章中阿里云MaxCompute公有云技术支持人员刘力夺通过一个实验向大家介绍了阿 ...

  6. 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库

      最近在编写的一个Apache  kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a    静态库编译的,,,而我们这 ...

  7. Understand:高效代码静态分析神器详解(转)

    之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...

  8. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

  9. 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html

    上一章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现. 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处 ...

随机推荐

  1. Template模式

    在开发时,有时会遇到对于一个算法的实现,在不同的对象中有不同的实现,可是这个算法的框架是同样的.这时能够使用Template模式或Strategy模式. Template是採用继承的方式来实现这一点, ...

  2. Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积

    Problem A. AerodynamicsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...

  3. Android编译提示ImportError: No module named bz2的解决办法

    在安装node.js时提示ImportError: No module named bz2.很明显这个python中没有装bz2的库导致的.解决方法:sudo apt-get install libb ...

  4. mysql online ddl2

          大家知道,互联网业务是典型的OLTP(online transaction process)应用,这种应用访问数据库的特点是大量的短事务高并发运行.因此任何限制高并发的动作都是不可接受的, ...

  5. windows下的python扩展包下载地址

    比如lxml什么的 Unofficial Windows Binaries for Python Extension Packages pip install xxx.whl

  6. jQuery获取表单各元素的值

    radio值获取 $("input[type='radio']:checked").val(); 2,设置指定的项为当前选中项 $("input[type='radio' ...

  7. Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  8. javascript编程的最佳实践推荐

    推荐的javascript编程的最佳实践,摘要记录在这里: 可维护的代码保证代码的性能部署代码 1 可维护的代码1.1什么是维护的代码:可理解性——其他人可以接手代码并理解它的意图和一般途径,而无需原 ...

  9. [转]WIN7服务一些优化方法

    本文转自:http://bbs.cfanclub.net/thread-391985-1-1.html Win7的服务,手动的一般不用管他,有些自动启动的,但对于有些用户来说是完全没用的,可以考虑禁用 ...

  10. MSP430常见问题之复位系统类

    Q1:请问msp430 怎么手动复位啊?是不是连到RST/NMI 上?但是这个脚不是和JTAG 连吗?我看到一些资料上说复位的话还要上拉电阻或者复位电路.A1:JTAG 功能只在下载程序时候使用,正常 ...