新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → xpath简明实例教程(简化版) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 12729 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: xpath简明实例教程(简化版) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hongjuesir 帅哥哟,离线,有人找我吗?魔羯座1982-1-1
      
      
      等级:大三(要不要学学XML呢?)
      文章:73
      积分:625
      门派:XML.ORG.CN
      注册:2007/6/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hongjuesir发送一个短消息 把hongjuesir加入好友 查看hongjuesir的个人资料 搜索hongjuesir在『 DOM/SAX/XPath 』的所有贴子 点击这里发送电邮给hongjuesir 访问hongjuesir的主页 引用回复这个贴子 回复这个贴子 查看hongjuesir的博客楼主
    发贴心情 xpath简明实例教程(简化版)

    <AAA>
              <BBB/>
              <CCC/>
              <BBB/>
              <BBB/>
              <DDD>
                   <BBB/>
              </DDD>
              <CCC/>
         </AAA>

    一、基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。

    /AAA
    选择根元素AAA

    /AAA/CCC
    选择AAA的所有CCC子元素

    /AAA/DDD/BBB
    选择AAA的子元素DDD的所有子元素

    二、如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)。

    //BBB
    选择所有BBB元素

    //DDD/BBB
    选择所有父元素是DDD的BBB元素

    三、星号 * 表示选择所有由星号之前的路径所定位的元素。

    /AAA/CCC/DDD/*
    选择所有路径依附于/AAA/CCC/DDD的元素

    /*/*/*/BBB
    选择所有的有3个祖先元素的BBB元素

    //*
    选择所有元素

    四、方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素。

    /AAA/BBB[1]
    选择AAA的第一个BBB子元素

    /AAA/BBB[last()]
    选择AAA的最后一个BBB子元素

    五、属性通过前缀 @ 来指定。

    //@id
    选择所有的id属性

    //BBB[@id]
    选择有id属性的BBB元素

    //BBB[@name]
    选择有name属性的BBB元素

    //BBB[@*]
    选择有任意属性的BBB元素

    //BBB[not(@*)]
    选择没有属性的BBB元素

    六、属性的值可以被用来作为选择的准则, normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格。

    //BBB[@id='b1']
    选择含有属性id且其值为'b1'的BBB元素

    //BBB[normalize-space(@name)='bbb']
    选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为'bbb'的BBB元素

    七、count()函数可以计数所选元素的个数。

    //*[count(BBB)=2]
    选择含有2个BBB子元素的元素

    //*[count(*)=2]
    选择含有2个子元素的元素

    八、name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true。

    //*[name()='BBB']
    选择所有名称为BBB的元素(这里等价于//BBB)

    //*[starts-with(name(),'B')]
    选择所有名称以"B"起始的元素

    //*[contains(name(),'C')]
    选择所有名称包含"C"的元素

    九、string-length函数返回字符串的字符数,你应该用&lt;替代<, 用&gt;代替>。

    //*[string-length(name()) = 3]
    选择名字长度为3的元素

    //*[string-length(name()) < 3]
    选择名字长度小于3的元素

    //*[string-length(name()) > 3]
    选择名字长度大于3的元素

    十、多个路径可以用分隔符 | 合并在一起,可以合并的路径数目没有限制

    //CCC | //BBB
    选择所有的CCC和BBB元素

    /AAA/EEE | //BBB
    选择所有的BBB元素和所有是AAA的子元素的EEE元素

    十一、child轴(axis)包含上下文节点的子元素, 作为默认的轴,可以忽略不写.

    /AAA
    等价于 /child::AAA

    /child::AAA
    等价于/AAA

    /AAA/BBB
    等价于/child::AAA/child::BBB

    十二、descendant (后代)轴包含上下文节点的后代,一个后代是指子节点或者子节点的子节点等等, 因此descendant轴不会包含属性和命名空间节点。

    /descendant::*
    选择文档根元素的所有后代.即所有的元素被选择

    /AAA/BBB/descendant::*
    选择/AAA/BBB的所有后代元素

    //CCC/descendant::*
    选择在祖先元素中有CCC的所有元素

    //CCC/descendant::DDD
    选择所有以CCC为祖先元素的DDD元素

    十三、parent轴(axis)包含上下文节点的父节点, 如果有父节点的话

    //DDD/parent::*
    选择DDD元素的所有父节点

    十四、ancestor轴(axis)包含上下节点的祖先节点, 该祖先节点由其上下文节点的父节点以及父节点的父节点等等诸如此类的节点构成,所以ancestor轴总是包含有根节点,除非上下文节点就是根节点本身.

    /AAA/BBB/DDD/CCC/EEE/ancestor::*
    选择一个绝对路径上的所有节点

    //FFF/ancestor::*
    选择FFF元素的祖先节点

    十五、following-sibling轴(axis)包含上下文节点之后的所有兄弟节点

    /AAA/BBB/following-sibling::*
    /AAA/BBB节点同层次的他之后兄弟节点

    //CCC/following-sibling::*
    所有CCC节点的它之后的兄弟节点

    十六、preceding-sibling 轴(axis)包含上下文节点之前的所有兄弟节点

    /AAA/BBB/following-sibling::*
    /AAA/BBB节点同层次的他之前兄弟节点

    //CCC/following-sibling::*
    所有CCC节点的它之前的兄弟节点

    十七、following轴(axis)包含同一文档中按文档顺序位于上下文节点之后的所有节点, 除了祖先节点,属性节点和命名空间节点

    /AAA/XXX/following::*
    /AAA/XXX之后的除了它的祖先节点以外的它之后所有节点

    十八、following轴(axis)包含同一文档中按文档顺序位于上下文节点之前的所有节点, 除了祖先节点,属性节点和命名空间节点

    /AAA/XXX/preceding::*
    /AAA/XXX之后的除了它的祖先节点以外的它之前的所有节点

    十九、descendant-or-self 轴(axis)包含上下文节点本身和该节点的后代节点

    /AAA/XXX/descendant-or-self::*
    包含/AAA/XXX自身的及它的子孙的节点

    二十、ancestor-or-self 轴(axis)包含上下文节点本身和该节点的祖先节点

    /AAA/XXX/DDD/EEE/ancestor-or-self::*
    包含/AAA/XXX/DDD/EEE自身的及它的祖先的节点,不包含兄弟节点

    二十一、ancestor, descendant, following, preceding 和self轴(axis)分割了XML文档(忽略属性节点和命名空间节点), 不能交迭, 而一起使用则包含所有节点

    二十二、div运算符做浮点除法运算, mod运算符做求余运算, floor函数返回不大于参数的最大整数(趋近于正无穷), ceiling返回不小于参数的最小整数(趋近于负无穷)

    //BBB[position() mod 2 = 0 ]
    选择偶数位置的BBB元素

    //BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]
    选择中间的BBB元素

    //CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]
    选择中间的CCC元素

    参考:(如果要看更详细的内容)

    http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html


       收藏   分享  
    顶(1)
      




    ----------------------------------------------
    踏实啃书

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/9/9 15:13:00
     
     GoogleAdSense魔羯座1982-1-1
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 点击这里发送电邮给Google AdSense 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/26 13:53:48

    本主题贴数5,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  xpath简明实例教程(简化版)(5134字) - hongjuesir,2007年9月9日
        回复:  [em12](6字) - taotaoahu,2009年4月4日
        回复:  真是好帖!学习了!(18字) - 九层楼,2009年4月3日
        回复:  你好,xpath中关于"//"的用法,我在使用时怎么有问题xml文件:<?xml versio..(740字) - therainman,2007年9月23日
        回复:  真好也,先顶一个(16字) - wzhm0301,2007年9月22日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    2,062.500ms