XPath 初步讲解
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 初步讲解的更多相关文章
- xpath详细讲解
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- yii2初步讲解 验证规则
http://www.yii-china.com/post/detail/9.html
- 全方面讲解TensorFlow
任何曾经试图在 Python 中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦.编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更 ...
- ContentProvider数据库共享之——实例讲解
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/harvic880925/article/details/44591631 前言:现在这段时间没这 ...
- MySQL/RDS数据如何同步到MaxCompute之实践讲解
摘要:大数据计算服务(MaxCompute,原名ODPS)是阿里云提供的一种快速.完全托管的EB级数据仓库解决方案.本文章中阿里云MaxCompute公有云技术支持人员刘力夺通过一个实验向大家介绍了阿 ...
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
最近在编写的一个Apache kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a 静态库编译的,,,而我们这 ...
- Understand:高效代码静态分析神器详解(转)
之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
- 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html
上一章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现. 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处 ...
随机推荐
- Android,iOS,浏览器打开手机QQ与指定用户聊天界面
在浏览器中可以通过JS代码打开QQ并弹出聊天界面,一般作为客服QQ使用.而在移动端腾讯貌似没有公布提供类似API,但是却可以使用schema模式来启动手机QQ. 以下为具体代码: 浏览器(包括手机浏览 ...
- Codeforces Gym 100650D Queens, Knights and Pawns 暴力
Problem D: Queens, Knights and PawnsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu ...
- 关于port的关闭——Linux
本文出自:http://blog.csdn.net/svitter 引文出自:http://bbs.chinaunix.net/thread-775649-1-1.html 1.关闭服务 servic ...
- SAP BW 通过视图创建数据源(无单位)
因业务明细表中数量没有单位,所以BW创建数据源时,需做增强 数据表: ZDB_H(抬头) ZDB_I(明细) ECC 系统中: 1.创建视图ZVDBWQ,因明细表中数量没有单位,所以创建视图时不包括数 ...
- Arrays.sort(new String[]{"aaa"}); 排序方法
private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off) { int length ...
- LVS 详解
http://zh.linuxvirtualserver.org/node/25 http://chrinux.blog.51cto.com/6466723/1198748 http://www.cn ...
- 将 Discuz X3 手机版默认的“标准版”改为“触屏版”
修改前请备份原文件 1.找到“\source\class\discuz\discuz_application.php”,将其中的 'mobiletpl' => array('1' =&g ...
- BootStrap2学习日记4---常用标签与样式
<small>:常常和h1标签一起搭配使用 如<h1>标题<small>小标题</small></h1> <abbr>:abbr ...
- Java对象的序列化和反序列化[转]
Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...
- cocos2d-x lua table与json的转换
cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...