zoukankan      html  css  js  c++  java
  • XPath实例教程

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

    /AAA

    选择根元素AAA


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

     

    /AAA/CCC

    选择AAA的所有CCC子元素


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

     

    /AAA/DDD/BBB

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


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

     

     

    实例 2

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

     

    //BBB

    选择所有BBB元素


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

     

    //DDD/BBB

    选择所有父元素是DDDBBB元素


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

     

     

    实例 3

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

     

    /AAA/CCC/DDD/*

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


         <AAA>
              <XXX>
                   <DDD>
                        <BBB/>
                        <BBB/>
                        <EEE/>
                        <FFF/>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD>
                        <
    BBB/>
                        <
    BBB/>
                        <
    EEE/>
                        <
    FFF/>
                   </DDD>
              </CCC>
              <CCC>
                   <BBB>
                        <BBB>
                             <BBB/>
                        </BBB>
                   </BBB>
              </CCC>
         </AAA>

     

    /*/*/*/BBB

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


         <AAA>
              <XXX>
                   <DDD>
                        <
    BBB/>
                        <
    BBB/>
                        <EEE/>
                        <FFF/>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD>
                        <
    BBB/>
                        <
    BBB/>
                        <EEE/>
                        <FFF/>
                   </DDD>
              </CCC>
              <CCC>
                   <BBB>
                        <
    BBB>
                             <BBB/>
                        </
    BBB>
                   </BBB>
              </CCC>
         </AAA>

     

    //*

    选择所有元素


         <
    AAA>
              <
    XXX>
                   <
    DDD>
                        <
    BBB/>
                        <
    BBB/>
                        <
    EEE/>
                        <
    FFF/>
                   </
    DDD>
              </
    XXX>
              <
    CCC>
                   <
    DDD>
                        <
    BBB/>
                        <
    BBB/>
                        <
    EEE/>
                        <
    FFF/>
                   </
    DDD>
              </
    CCC>
              <
    CCC>
                   <
    BBB>
                        <
    BBB>
                             <
    BBB/>
                        </
    BBB>
                   </
    BBB>
              </
    CCC>
         </
    AAA>

     

     

     

    实例 4

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

     

    /AAA/BBB[1]

    选择AAA的第一个BBB子元素


         <AAA>
              <
    BBB/>
              <BBB/>
              <BBB/>
              <BBB/>
         </AAA>

     

    /AAA/BBB[last()]

    选择AAA的最后一个BBB子元素


         <AAA>
              <BBB/>
              <BBB/>
              <BBB/>
              <
    BBB/>
         </AAA>

     

     

     

    实例 5

    //@id

    选择所有的id属性


         <AAA>
              <BBB
    id = "b1"/>
              <BBB
    id = "b2"/>
              <BBB name = "bbb"/>
              <BBB/>
         </AAA>

     

    //BBB[@id]

    选择有id属性的BBB元素


         <AAA>
              <
    BBB id = "b1"/>
              <
    BBB id = "b2"/>
              <BBB name = "bbb"/>
              <BBB/>
         </AAA>

     

    //BBB[@name]

    选择有name属性的BBB元素


         <AAA>
              <BBB id = "b1"/>
              <BBB id = "b2"/>
              <
    BBB name = "bbb"/>
              <BBB/>
         </AAA>

     

    //BBB[@*]

    选择有任意属性的BBB元素


         <AAA>
              <
    BBB id = "b1"/>
              <
    BBB id = "b2"/>
              <
    BBB name = "bbb"/>
              <BBB/>
         </AAA>

     

    //BBB[not(@*)]

    选择没有属性的BBB元素


         <AAA>
              <BBB id = "b1"/>
              <BBB id = "b2"/>
              <BBB name = "bbb"/>
              <
    BBB/>
         </AAA>

     

     

     

    实例 6

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

     

    //BBB[@id='b1']

    选择含有属性id且其值为'b1'BBB元素


         <AAA>
              <
    BBB id = "b1"/>
              <BBB name = " bbb "/>
              <BBB name = "bbb"/>
         </AAA>

     

    //BBB[@name='bbb']

    选择含有属性name且其值为'bbb'BBB元素


         <AAA>
              <BBB id = "b1"/>
              <BBB name = " bbb "/>
              <
    BBB name = "bbb"/>
         </AAA>

     

    //BBB[normalize-space(@name)='bbb']

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


         <AAA>
              <BBB id = "b1"/>
              <
    BBB name = " bbb "/>
              <
    BBB name = "bbb"/>
         </AAA>

     

     

     

    实例 7

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

     

    //*[count(BBB)=2]

    选择含有2BBB子元素的元素


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

     

    //*[count(*)=2]

    选择含有2个子元素的元素


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

     

    //*[count(*)=3]

    选择含有3个子元素的元素


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

     

     

     

    实例 8

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

     

    //*[name()='BBB']

    选择所有名称为BBB的元素(这里等价于//BBB)


         <AAA>
              <BCC>
                   <
    BBB/>
                   <
    BBB/>
                   <
    BBB/>
              </BCC>
              <DDB>
                   <
    BBB/>
                   <
    BBB/>
              </DDB>
              <BEC>
                   <CCC/>
                   <DBD/>
              </BEC>
         </AAA>

     

    //*[starts-with(name(),'B')]

    选择所有名称以"B"起始的元素


         <AAA>
              <
    BCC>
                   <
    BBB/>
                   <
    BBB/>
                   <
    BBB/>
              </
    BCC>
              <DDB>
                   <
    BBB/>
                   <
    BBB/>
              </DDB>
              <
    BEC>
                   <CCC/>
                   <DBD/>
              </
    BEC>
         </AAA>

     

    //*[contains(name(),'C')]

    选择所有名称包含"C"的元素


         <AAA>
              <
    BCC>
                   <BBB/>
                   <BBB/>
                   <BBB/>
              </
    BCC>
              <DDB>
                   <BBB/>
                   <BBB/>
              </DDB>
              <
    BEC>
                   <
    CCC/>
                   <DBD/>
              </
    BEC>
         </AAA>

     

     

     

    实例 10

    多个路径可以用分隔符 | 合并在一起

     

    //CCC | //BBB

    选择所有的CCCBBB元素


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

     

    /AAA/EEE | //BBB

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


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

     

    /AAA/EEE | //DDD/CCC | /AAA | //BBB

    可以合并的路径数目没有限制


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

     

     

     

    实例 11

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

     

    /AAA

    等价于 /child::AAA


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

     

    /child::AAA

    等价于/AAA


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

     

    /AAA/BBB

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


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

     

    /child::AAA/child::BBB

    等价于/AAA/BBB


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

     

    /child::AAA/BBB

    二者都可以被合并


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

     

     

     

     

    实例 12

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

     

    /descendant::*

    选择文档根元素的所有后代.即所有的元素被选择


         <
    AAA>
              <
    BBB>
                   <
    DDD>
                        <
    CCC>
                             <
    DDD/>
                             <
    EEE/>
                        </
    CCC>
                   </
    DDD>
              </
    BBB>
              <
    CCC>
                   <
    DDD>
                        <
    EEE>
                             <
    DDD>
                                  <
    FFF/>
                             </
    DDD>
                        </
    EEE>
                   </
    DDD>
              </
    CCC>
         </
    AAA>

     

    /AAA/BBB/descendant::*

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


         <AAA>
              <BBB>
                   <
    DDD>
                        <
    CCC>
                             <
    DDD/>
                             <
    EEE/>
                        </
    CCC>
                   </
    DDD>
              </BBB>
              <CCC>
                   <DDD>
                        <EEE>
                             <DDD>
                                  <FFF/>
                             </DDD>
                        </EEE>
                   </DDD>
              </CCC>
         </AAA>

     

    //CCC/descendant::*

    选择在祖先元素中有CCC的所有元素


         <AAA>
              <BBB>
                   <DDD>
                        <CCC>
                             <
    DDD/>
                             <
    EEE/>
                        </CCC>
                   </DDD>
              </BBB>
              <CCC>
                   <
    DDD>
                        <
    EEE>
                             <
    DDD>
                                  <
    FFF/>
                             </
    DDD>
                        </
    EEE>
                   </
    DDD>
              </CCC>
         </AAA>

     

    //CCC/descendant::DDD

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


         <AAA>
              <BBB>
                   <DDD>
                        <CCC>
                             <
    DDD/>
                             <EEE/>
                        </CCC>
                   </DDD>
              </BBB>
              <CCC>
                   <
    DDD>
                        <EEE>
                             <
    DDD>
                                  <FFF/>
                             </
    DDD>
                        </EEE>
                   </
    DDD>
              </CCC>
         </AAA>

     

     

     

     

    实例 13

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

     

    //DDD/parent::*

    选择DDD元素的所有父节点


         <AAA>
              <
    BBB>
                   <DDD>
                        <
    CCC>
                             <DDD/>
                             <EEE/>
                        </
    CCC>
                   </DDD>
              </
    BBB>
              <
    CCC>
                   <DDD>
                        <
    EEE>
                             <DDD>
                                  <FFF/>
                             </DDD>
                        </
    EEE>
                   </DDD>
              </
    CCC>
         </AAA>

     

     

     

     

    实例 14

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

     

    /AAA/BBB/DDD/CCC/EEE/ancestor::*

    选择一个绝对路径上的所有节点


         <
    AAA>
              <
    BBB>
                   <
    DDD>
                        <
    CCC>
                             <DDD/>
                             <EEE/>
                        </
    CCC>
                   </
    DDD>
              </
    BBB>
              <CCC>
                   <DDD>
                        <EEE>
                             <DDD>
                                  <FFF/>
                             </DDD>
                        </EEE>
                   </DDD>
              </CCC>
         </
    AAA>

     

    //FFF/ancestor::*

    选择FFF元素的祖先节点


         <
    AAA>
              <BBB>
                   <DDD>
                        <CCC>
                             <DDD/>
                             <EEE/>
                        </CCC>
                   </DDD>
              </BBB>
              <
    CCC>
                   <
    DDD>
                        <
    EEE>
                             <
    DDD>
                                  <FFF/>
                             </
    DDD>
                        </
    EEE>
                   </
    DDD>
              </
    CCC>
         </
    AAA>

     

     

     

     

    实例 15

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

     

    /AAA/BBB/following-sibling::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <DDD/>
              </BBB>
              <
    XXX>
                   <DDD>
                        <EEE/>
                        <DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </
    XXX>
              <
    CCC>
                   <DDD/>
              </
    CCC>
         </AAA>

     

    //CCC/following-sibling::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <
    DDD/>
              </BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <DDD/>
                        <CCC/>
                        <
    FFF/>
                        <
    FFF>
                             <GGG/>
                        </
    FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

     

     

     

    实例 16

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

     

    /AAA/XXX/preceding-sibling::*

     


         <AAA>
              <
    BBB>
                   <CCC/>
                   <DDD/>
              </
    BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

    //CCC/preceding-sibling::*

     


         <AAA>
              <
    BBB>
                   <CCC/>
                   <DDD/>
              </
    BBB>
              <
    XXX>
                   <DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </
    XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

     

     

     

    实例 17

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

     

    /AAA/XXX/following::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                        <DDD/>
                        <DDD>
                             <EEE/>
                        </DDD>
                   </ZZZ>
                   <FFF>
                        <GGG/>
                   </FFF>
              </BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </XXX>
              <
    CCC>
                   <
    DDD/>
              </
    CCC>
         </AAA>

     

    //ZZZ/following::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                        <DDD/>
                        <DDD>
                             <EEE/>
                        </DDD>
                   </ZZZ>
                   <
    FFF>
                        <
    GGG/>
                   </
    FFF>
              </BBB>
              <
    XXX>
                   <
    DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <
    CCC/>
                        <
    FFF/>
                        <
    FFF>
                             <
    GGG/>
                        </
    FFF>
                   </
    DDD>
              </
    XXX>
              <
    CCC>
                   <
    DDD/>
              </
    CCC>
         </AAA>

     

     

     

     

    实例 18

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

     

    /AAA/XXX/preceding::*

     


         <AAA>
              <
    BBB>
                   <
    CCC/>
                   <
    ZZZ>
                        <
    DDD/>
                   </
    ZZZ>
              </
    BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

    //GGG/preceding::*

     


         <AAA>
              <
    BBB>
                   <
    CCC/>
                   <
    ZZZ>
                        <
    DDD/>
                   </
    ZZZ>
              </
    BBB>
              <XXX>
                   <DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <
    CCC/>
                        <
    FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

     

     

     

    实例 19

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

     

    /AAA/XXX/descendant-or-self::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                        <DDD/>
                   </ZZZ>
              </BBB>
              <
    XXX>
                   <
    DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <
    CCC/>
                        <
    FFF/>
                        <
    FFF>
                             <
    GGG/>
                        </
    FFF>
                   </
    DDD>
              </
    XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

    //CCC/descendant-or-self::*

     


         <AAA>
              <BBB>
                   <
    CCC/>
                   <ZZZ>
                        <DDD/>
                   </ZZZ>
              </BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <DDD/>
                        <
    CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </XXX>
              <
    CCC>
                   <
    DDD/>
              </
    CCC>
         </AAA>

     

     

     

     

    实例 20

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

     

    /AAA/XXX/DDD/EEE/ancestor-or-self::*

     


         <
    AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                        <DDD/>
                   </ZZZ>
              </BBB>
              <
    XXX>
                   <
    DDD>
                        <
    EEE/>
                        <DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </
    DDD>
              </
    XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </
    AAA>

     

    //GGG/ancestor-or-self::*

     


         <
    AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                        <DDD/>
                   </ZZZ>
              </BBB>
              <
    XXX>
                   <
    DDD>
                        <EEE/>
                        <DDD/>
                        <CCC/>
                        <FFF/>
                        <
    FFF>
                             <
    GGG/>
                        </
    FFF>
                   </
    DDD>
              </
    XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </
    AAA>

     

     

     

     

    实例 21

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

     

    //GGG/ancestor::*

     


         <
    AAA>
              <BBB>
                   <CCC/>
                   <ZZZ/>
              </BBB>
              <
    XXX>
                   <
    DDD>
                        <EEE/>
                        <
    FFF>
                             <HHH/>
                             <GGG>
                                  <JJJ>
                                       <QQQ/>
                                  </JJJ>
                                  <JJJ/>
                             </GGG>
                             <HHH/>
                        </
    FFF>
                   </
    DDD>
              </
    XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </
    AAA>

     

    //GGG/descendant::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ/>
              </BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <FFF>
                             <HHH/>
                             <GGG>
                                  <
    JJJ>
                                       <
    QQQ/>
                                  </
    JJJ>
                                  <
    JJJ/>
                             </GGG>
                             <HHH/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

    //GGG/following::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ/>
              </BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <FFF>
                             <HHH/>
                             <GGG>
                                  <JJJ>
                                       <QQQ/>
                                  </JJJ>
                                  <JJJ/>
                             </GGG>
                             <
    HHH/>
                        </FFF>
                   </DDD>
              </XXX>
              <
    CCC>
                   <
    DDD/>
              </
    CCC>
         </AAA>

     

    //GGG/preceding::*

     


         <AAA>
              <
    BBB>
                   <
    CCC/>
                   <
    ZZZ/>
              </
    BBB>
              <XXX>
                   <DDD>
                        <
    EEE/>
                        <FFF>
                             <
    HHH/>
                             <GGG>
                                  <JJJ>
                                       <QQQ/>
                                  </JJJ>
                                  <JJJ/>
                             </GGG>
                             <HHH/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

    //GGG/self::*

     


         <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ/>
              </BBB>
              <XXX>
                   <DDD>
                        <EEE/>
                        <FFF>
                             <HHH/>
                             <
    GGG>
                                  <JJJ>
                                       <QQQ/>
                                  </JJJ>
                                  <JJJ/>
                             </
    GGG>
                             <HHH/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

     

    //GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*

     


         <
    AAA>
              <
    BBB>
                   <
    CCC/>
                   <
    ZZZ/>
              </
    BBB>
              <
    XXX>
                   <
    DDD>
                        <
    EEE/>
                        <
    FFF>
                             <
    HHH/>
                             <
    GGG>
                                  <
    JJJ>
                                       <
    QQQ/>
                                  </
    JJJ>
                                  <
    JJJ/>
                             </
    GGG>
                             <
    HHH/>
                        </
    FFF>
                   </
    DDD>
              </
    XXX>
              <
    CCC>
                   <
    DDD/>
              </
    CCC>
         </
    AAA>

     

     

     

     

    实例 22

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

     

    //BBB[position() mod 2 = 0 ]

    选择偶数位置的BBB元素


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

     

    //BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]

    选择中间的BBB元素


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

     

    //CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]

    选择中间的CCC元素


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

  • 相关阅读:
    HttpClient
    Windows Runtime (RT)
    大败局
    postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑
    postgresql+postgis+pgrouting实现最短路径查询(2)---openlayers+geoserver实现最短路径
    nodejs+postgis实现搜周边
    mac环境下安装posgreSQL,postGIS,pgrouting方法
    postgresql+postgis+pgrouting实现最短路径查询(3)--流程图
    openlayers中的自定制工具栏,包含画点、线、面
    经常用到的23种广告代码。包括图片切换、对联广告等
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152657.html
Copyright © 2011-2022 走看看