XPath 11个实例

互联网 17-2-28
实例 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
     <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
     <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>

//@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\']
     <AAA>             <BBB id = \"b1\"/>             <BBB name = \" bbb \"/>             <BBB name = \"bbb\"/>        </AAA>

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

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

     <AAA>             <CCC>                  <BBB/>                  <BBB/>                  <BBB/>             </CCC>             <DDD>                  <BBB/>                  <BBB/>             </DDD>             <EEE>                  <CCC/>                  <DDD/>             </EEE>        </AAA>      //*[count(*)=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>

实例 8name()函数返回元素的名称, 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>

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

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

<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>

实例 10child轴(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>

/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>                  <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>       </AAA>

以上就是XPath 11个实例的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: Xpath
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:从xml中获取城市,省份名称

相关资讯