使用xpath操作xml[转]
基本的XPath语法类似于在一个文件系统中定位文件?
1 如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。?
2 如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)?
3 星号 * 表示选择所有由星号之前的路径所定位的元素?
4 方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素?
5 属性通过前缀 @ 来指定?
6 属性的值可以被用来作为选择的准则, normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格?
7 count()函数可以计数所选元素的个数?
8 name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true?
8 string-length函数返回字符串的字符数,你应该用<替代<, 用>代替>?
9 多个路径可以用分隔符 | 合并在一起?
10 descendant (后代)轴包含上下文节点的后代,一个后代是指子节点或者子节点的子节点等等, 因此descendant轴不会包含属性和命名空间节点?
11 div运算符做浮点除法运算, mod运算符做求余运算, floor函数返回不大于参数的最大整数(趋近于正无穷), ceiling返回不小于参数的最小整数(趋近于负无穷)?
<AAA>?
?? <BBB id=1/>?
?? <CCC/>?
?? <BBB/>?
?? <BBB/>?
?? <DDD>?
?????? <BBB/>?
?? </DDD>?
?? <CCC/>?
</AAA>?
路径:??????????????????? 元素?
/AAA????????????????? 选择根元素AAA?
/AAA/CCC????????????? 选择所有子元素CCC?
/AAA/DDD/BBB????????? 选择子元素DDD中的BBB元素?
//BBB???????????????? 选择所有BBB元素?
//DDD/BBB???????????? 选择所有父元素是DDD的BBB元素?
/AAA/CCC/DDD/*??????? 选中元素BBB?
/*/*/*/BBB??????????? 选择所有的有3个祖先元素的BBB元素?
//*?????????????????? 选择所有?
/AAA/BBB[1]?????????? 选择第一个BBB?
/AAA/BBB[last()]????? 选择最后一个BBB?
//@id???????????????? 选择所有id属性?
//BBB[@id]??????????? 选择有id属性的BBB元素?
//BBB[@*]???????????? 选择具有属性的BBB元素?
//BBB[not(@*)]??????? 与上相反?
//BBB[@id=1]????????? 选择属性id值等于1的BBB元素?
//BBB[normalize-space(@name)='bbb']?
//*[count(BBB)=2]???? 选择含有2个BBB子元素的元素?
//*[count(*)=2]?????? 选择含有2个子元素的元素?
//*[name()='BBB']???? 选择所有名称为BBB的元素(这里等价于//BBB)?
//*[starts-with(name(),'B')] 选择所有名称以"B"起始的元素?
//*[contains(name(),'C')]? 选择所有名称包含"C"的元素?
//*[string-length(name()) > 3]? 选择名字长度大于3的元素?
//CCC | //BBB???????? 选择所有的CCC和BBB元素?
/child::AAA/child::BBB 等价于 /AAA/BBB?
/descendant::*??????? 选择文档根元素的所有后代.即所有的元素被选择?
/AAA/BBB/descendant::*? 选择/AAA/BBB的所有后代元素?
//CCC/descendant::*?? 选择在祖先元素中有CCC的所有元素?
//CCC/descendant::DDD? 选择所有以CCC为祖先元素的DDD元素?
//DDD/parent::*?????? 选择DDD元素的所有父节点?
/AAA/BBB/DDD/CCC/EEE/ancestor::*?
/AAA/BBB/following-sibling::* following-sibling轴(axis)包含上下文节点之后的所有兄弟节点?
/AAA/XXX/preceding-sibling::* 与上相反?
/AAA/XXX/following::*? 包含同一文档中按文档顺序位于上下文节点之后的所有节点, 除了祖先节点,属性节点和命名空间节点?
/AAA/XXX/preceding::*?? 包含同一文档中按文档顺序位于上下文节点之前的所有节点, 除了祖先节点,属性节点和命名空间节点?
/AAA/XXX/descendant-or-self::*? descendant-or-self 轴(axis)包含上下文节点本身和该节点的后代节点?
/AAA/XXX/DDD/EEE/ancestor-or-self::*? ancestor-or-self 轴(axis)包含上下文节点本身和该节点的祖先节点?
//BBB[position() mod 2 = 0 ]??? 选择偶数位置的BBB元素?
//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]?? 选择中间的BBB元素。
?
更多关注:http://www.lsoba.com