|   
| 
| | « | October 2025 | » |  | 日 | 一 | 二 | 三 | 四 | 五 | 六 |  |  |  |  | 1 | 2 | 3 | 4 |  5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |  | |  | 
 |  
| 统计 |  
| blog名称:小雨 日志总数:262
 评论数量:1273
 留言数量:15
 访问次数:4690204
 建立时间:2005年1月8日
 |  |  
 | W3CHINA Blog首页    管理页面    写新日志    退出 
 
 
|  [知识积累]xpath 例子 |  
| http://www.zvon.org/xxl/XPathTutorial/Output_chi/example1.html
基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径
1 
/AAA
选择根元素AAA
     <AAA>           <BBB/>           <CCC/>           <BBB/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC/>      </AAA> 
2 
/AAA/DDD/BBB
选择AAA的子元素DDD的所有子元素
     <AAA>           <BBB/>           <CCC/>           <BBB/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC/>      </AAA> 
3 
如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
//BBB
选择所有BBB元素
     <AAA>           <BBB/>           <CCC/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC>                <DDD>                     <BBB/>                     <BBB/>                </DDD>           </CCC>      </AAA> 4 
//DDD/BBB
选择所有父元素是DDD的BBB元素
     <AAA>           <BBB/>           <CCC/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC>                <DDD>                     <BBB/>                     <BBB/>                </DDD>           </CCC>      </AAA> 
5
星号 * 表示选择所有由星号之前的路径所定位的元素
/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> 
6 
/*/*/*/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> 
7 
//*
选择所有元素
     <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> 
8
方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.
/AAA/BBB[1] 选择AAA的第一个BBB子元素 
     <AAA>           <BBB/>           <BBB/>           <BBB/>           <BBB/>      </AAA>  /AAA/BBB[last()] 选择AAA的最后一个BBB子元素 
     <AAA>           <BBB/>           <BBB/>           <BBB/>           <BBB/>      </AAA>  
9
//@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>  
10
属性的值可以被用来作为选择的准则, 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>
 
 |  
| 
 阅读全文(7783) | 回复(4) | 编辑 | 精华
 |  
 
| 回复:xpath 例子 |  
| http://www.opendl.com/openxml/w3/TR/xpath/xpath-gb.html
 
 |  
| 
 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 |  
 
| 回复:xpath 例子 |  
| div运算符做浮点除法运算, mod运算符做求余运算, floor函数返回不大于参数的最大整数(趋近于正无穷), ceiling返回不小于参数的最小整数(趋近于负无穷)
//BBB[position() mod 2 = 0 ] 选择偶数位置的BBB元素 
     <AAA>           <BBB/>           <BBB/>           <BBB/>           <BBB/>           <BBB/>           <BBB/>           <BBB/>           <BBB/>           <CCC/>           <CCC/>           <CCC/>
 
 |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |  
 
| 回复:xpath 例子 |  
| 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>
 
 |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |  
 
| 回复:xpath 例子 |  
| count()函数可以计数所选元素的个数
//*[count(BBB)=2] 选择含有2个BBB子元素的元素 
     <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>
 
 |  
| 个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |  
  »  1 » 
 |