XPath实例演示

XPath目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路径:通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节点.
[参考 XPath Tutorial]
//example.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<A id="a1">
   <B id="b1">
     <C id="c1">
 
        <B name="b">B1</B>
        <B name=" b ">B2</B>
        <D id="d1"/>
       <E id="e1">e1</E>
         <E id="e2">e2</E>
         <E id="e3">e3</E>
         <E id="e4">e4</E>
         <E id="e5">e5</E>
         <WF/>
        
     </C>
    </B>
    <B id="b2">B4</B>
    <V id="c2">
     <B/>
     <D id="d2">this's a D</D>
     <F/>
    </V>
    <E>e6</E>
    <E>e7</E>
 </A>
 
 
//testXpath.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TestXpath</title>
</head>
<body>
<script type="text/javascript">
function createDomDoc()
{
 var flag = [
     "Msxml2.DOMDocument.5.0",
     "Msxml2.DOMDocument.4.0",
     "Msxml2.DOMDocument.3.0",
     "Msxml2.DOMDocument",
     "Microsoft.XmlDom"
     ];
 for(var i =0;i<flag.length;i++)
 {
   try{
       var domDoc  = new ActiveXObject(flag[i]);
       return domDoc;
   
  }catch(e){}
 }
return null;
}

var xmlDoc = createDomDoc();
if(xmlDoc!=null)
{
  xmlDoc.async="false"
  xmlDoc.load("sample.xml");
 
//查找所有的"B"
  var xpath="//B";
 //查找所有元素
  xpath = "//*";
//  选择所有路径依附于/A/B/的元素
  xpath ="/A/B/*";
//选择所有的有3个祖先元素的B元素
  xpath ="/*/*/*/B" ;
//  选择所有父元素是DDD的BBB元素
  xpath="//C/D";
 
// 选择A/B/C的第一个E子元素
  xpath="/A/B/C/E[1]";
//选择A/B/C的最后一个E子元素
  xpath="/A/B/C/E[last()]" ;
 
//选择有name属性的B元素
  xpath = "//B[@name]" ;
 //选择所有的name属性
  xpath="//@name";
 //选择有任意属性的B元素
  xpath="//B[@*]";
 //选择没有属性的B元素
 xpath="//B[not(@*)]";
 
 //选择含有属性id且其值为'e2'的E元素
 xpath="//E[@id='e2']";
 
 //选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为'b'的B元素
xpath="//B[normalize-space(@name)='b']";
//选择含有2个B子元素的元素
xpath="//*[count(B)=2]";
//选择含有3个子元素的元素
xpath="//*[count(*)=3]";
//选择所有名称为B的元素(这里等价于//B)
xpath="//*[name()='B']";
//选择所有名称以"W"起始的元素
xpath="//*[starts-with(name(),'W')]";
//选择所有名称包含"W"的元素
xpath="//*[contains(name(),'W')]";
//选择名字长度为2(大于、小于)的元素;
xpath="//*[string-length(name()) = 2]";
xpath="//*[string-length(name()) < 2]";
xpath="//*[string-length(name()) > 1]";
//多个路径可以用分隔符 | 合并在一起,可以合并的路径数目没有限制,选择所有的WF和C元素
xpath="//WF | //C";
//等价于/A
xpath="/child::A";
//等价于//C/D
xpath="//child::C/child::D";
//选择文档根元素的所有后代.即所有的元素被选择
xpath="/descendant::*";
//选择/A/C的所有后代元素
xpath="/A/C/descendant::*";
//选择D元素的所有父节点
xpath="//D/parent::*";
//选择WF元素的祖先节点
xpath="//WF/ancestor::*";
//包含上下文节点之后的所有兄弟节点(此节点之后的所有兄弟节点)
xpath="//WF/following-sibling::*";
//包含上下文节点之前的所有兄弟节点(此节点之前的所有兄弟节点)
xpath="//WF/preceding-sibling::*";
//包含同一文档中按文档顺序位于上下文节点 之后 的所有节点, 除了祖先节点,属性节点和命名空间节点
xpath="/A/B/following::*";
xpath="//B/following::*";
//包含同一文档中按文档顺序位于上下文节点之前的所有节点, 除了祖先节点,属性节点和命名空间节点
xpath="//WF/preceding::*";
//包含上下文节点本身和该节点的后代节点;
xpath="//C/descendant-or-self::*";
//仅代表自身节点
xpath="//A/self::*";
//一起使用则包含所有节点
xpath="//WF/ancestor::* | //Wf/descendant::* | //WF/following::* | //WF/preceding::* | //WF/self::*";
//选择当前节点的文字
xpath="//E/child::text()";
//选择所有当前节点的子节点
xpath="//V/child::node()";
//选择偶数位置的B元素
xpath="//B[position() mod 2 = 0 ]";
//选择中间的E元素
/*
div运算符做浮点除法运算,
mod运算符做求余运算,
floor函数返回不大于参数的最大整数(趋近于正无穷),
ceiling返回不小于参数的最小整数(趋近于负无穷) */
xpath="//E[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]";
 
//可以忽略空白,寻找属性name='b' or name=' b '的元素
xpath="//@name['b']";
//不忽略空白,完全匹配,寻找属性name='b'的元素
xpath="//@name[.='b']";
 
 
  var   nodes=xmlDoc.selectNodes(xpath);    
 // var   node=xmlDoc.selectSingleNode(xpath); 
//  alert(node.tagName);  
  for(var i= 0 ;i<nodes.length;i++)
  {
    objNode = nodes.nextNode();
    alert(objNode.nodeName);
    alert(objNode.text);
  
  }
 
}
else
{
 alert("请使用IE进行测试");
}
 
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值