xpath简单入门

 XPath目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路径:通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节点.
//example.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<A id="a1">
    <B id="b1">
      <Cid="c1">
 
            <Bname="b">B1</B>
            <B name=" b">B2</B>
            <D id="d1"/>
          <Eid="e1">e1</E>
              <Eid="e2">e2</E>
              <Eid="e3">e3</E>
              <Eid="e4">e4</E>
              <Eid="e5">e5</E>
              <WF/>
             
        </C>
      </B>
      <Bid="b2">B4</B>
      <Vid="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.01Transitional//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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值