以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 DOM/SAX/XPath 』 (http://bbs.xml.org.cn/list.asp?boardid=11) ---- xpath简明实例教程(简化版) (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=52442) |
-- 作者:hongjuesir -- 发布时间:9/9/2007 3:13:00 PM -- xpath简明实例教程(简化版) <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> 一、基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。 /AAA /AAA/CCC /AAA/DDD/BBB 二、如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)。 //BBB //DDD/BBB 三、星号 * 表示选择所有由星号之前的路径所定位的元素。 /AAA/CCC/DDD/* /*/*/*/BBB //* 四、方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素。 /AAA/BBB[1] /AAA/BBB[last()] 五、属性通过前缀 @ 来指定。 //@id //BBB[@id] //BBB[@name] //BBB[@*] //BBB[not(@*)] 六、属性的值可以被用来作为选择的准则, normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格。 //BBB[@id='b1'] //BBB[normalize-space(@name)='bbb'] 七、count()函数可以计数所选元素的个数。 //*[count(BBB)=2] //*[count(*)=2] 八、name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true。 //*[name()='BBB'] //*[starts-with(name(),'B')] //*[contains(name(),'C')] 九、string-length函数返回字符串的字符数,你应该用<替代<, 用>代替>。 //*[string-length(name()) = 3] //*[string-length(name()) < 3] //*[string-length(name()) > 3] 十、多个路径可以用分隔符 | 合并在一起,可以合并的路径数目没有限制 //CCC | //BBB /AAA/EEE | //BBB 十一、child轴(axis)包含上下文节点的子元素, 作为默认的轴,可以忽略不写. /AAA /child::AAA /AAA/BBB 十二、descendant (后代)轴包含上下文节点的后代,一个后代是指子节点或者子节点的子节点等等, 因此descendant轴不会包含属性和命名空间节点。 /descendant::* /AAA/BBB/descendant::* //CCC/descendant::* //CCC/descendant::DDD 十三、parent轴(axis)包含上下文节点的父节点, 如果有父节点的话 //DDD/parent::* 十四、ancestor轴(axis)包含上下节点的祖先节点, 该祖先节点由其上下文节点的父节点以及父节点的父节点等等诸如此类的节点构成,所以ancestor轴总是包含有根节点,除非上下文节点就是根节点本身. /AAA/BBB/DDD/CCC/EEE/ancestor::* //FFF/ancestor::* 十五、following-sibling轴(axis)包含上下文节点之后的所有兄弟节点 /AAA/BBB/following-sibling::* //CCC/following-sibling::* 十六、preceding-sibling 轴(axis)包含上下文节点之前的所有兄弟节点 /AAA/BBB/following-sibling::* //CCC/following-sibling::* 十七、following轴(axis)包含同一文档中按文档顺序位于上下文节点之后的所有节点, 除了祖先节点,属性节点和命名空间节点 /AAA/XXX/following::* 十八、following轴(axis)包含同一文档中按文档顺序位于上下文节点之前的所有节点, 除了祖先节点,属性节点和命名空间节点 /AAA/XXX/preceding::* 十九、descendant-or-self 轴(axis)包含上下文节点本身和该节点的后代节点 /AAA/XXX/descendant-or-self::* 二十、ancestor-or-self 轴(axis)包含上下文节点本身和该节点的祖先节点 /AAA/XXX/DDD/EEE/ancestor-or-self::* 二十一、ancestor, descendant, following, preceding 和self轴(axis)分割了XML文档(忽略属性节点和命名空间节点), 不能交迭, 而一起使用则包含所有节点 二十二、div运算符做浮点除法运算, mod运算符做求余运算, floor函数返回不大于参数的最大整数(趋近于正无穷), ceiling返回不小于参数的最小整数(趋近于负无穷) //BBB[position() mod 2 = 0 ] //BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ] //CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ] 参考:(如果要看更详细的内容) http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
|
-- 作者:wzhm0301 -- 发布时间:9/22/2007 10:34:00 PM -- 真好也,先顶一个 |
-- 作者:therainman -- 发布时间:9/23/2007 12:36:00 PM -- 你好,xpath中关于"//"的用法,我在使用时怎么有问题 xml文件: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="xpath1.xsl"?> <A id="a1"> <B id="b1"> <C id="c1"> <B name="b">B1</B> <D id="d1"/> <E id="e1">e1</E> <E id="e2">e2</E> </C> </B> <B id="b2">B3</B> <C id="c2"> <D id="d2">this's a D</D> </C> <E id="e3">e3</E> </A> xsl文件: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:value-of select="//E"></xsl:value-of> </xsl:template> </xsl:stylesheet> 按道理应该遍历所有E元素,结果应该是:e1 e2 e3怎么实际运行结果是:e1 难道我代码有问题?谢谢! |
-- 作者:九层楼 -- 发布时间:4/3/2009 5:28:00 PM -- 真是好帖!学习了! |
-- 作者:taotaoahu -- 发布时间:4/4/2009 12:32:00 PM -- |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |