基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径
/AAA |
---|
选择根元素AAA |
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/CCC |
---|
选择AAA的所有CCC子元素 |
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/DDD/BBB |
---|
选择AAA的子元素DDD的所有子元素 |
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
实例 2
如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
//BBB |
---|
选择所有BBB元素 |
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//DDD/BBB |
---|
选择所有父元素是DDD的BBB元素 |
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/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> |
在XLab中打开实例 | 树视图 (JPG) |
/*/*/*/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> |
在XLab中打开实例 | 树视图 (JPG) |
//* |
---|
选择所有元素 |
<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/BBB[1] |
---|
选择AAA的第一个BBB子元素 |
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/BBB[last()] |
---|
选择AAA的最后一个BBB子元素 |
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//@id |
---|
选择所有的id属性 |
<AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[@id] |
---|
选择有id属性的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[@name] |
---|
选择有name属性的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[@*] |
---|
选择有任意属性的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[not(@*)] |
---|
选择没有属性的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/> <BBB/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[@id='b1'] |
---|
选择含有属性id且其值为'b1'的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB name = " bbb "/> <BBB name = "bbb"/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[@name='bbb'] |
---|
选择含有属性name且其值为'bbb'的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB name = " bbb "/> <BBB name = "bbb"/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[normalize-space(@name)='bbb'] |
---|
选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为'bbb'的BBB元素 |
<AAA> <BBB id = "b1"/> <BBB name = " bbb "/> <BBB name = "bbb"/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[count(BBB)=2] |
---|
选择含有2个BBB子元素的元素 |
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[count(*)=2] |
---|
选择含有2个子元素的元素 |
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[count(*)=3] |
---|
选择含有3个子元素的元素 |
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[name()='BBB'] |
---|
选择所有名称为BBB的元素(这里等价于//BBB) |
<AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[starts-with(name(),'B')] |
---|
选择所有名称以"B"起始的元素 |
<AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[contains(name(),'C')] |
---|
选择所有名称包含"C"的元素 |
<AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[string-length(name()) = 3] |
---|
选择名字长度为3的元素 |
<AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[string-length(name()) < 3] |
---|
选择名字长度小于3的元素 |
<AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//*[string-length(name()) > 3] |
---|
选择名字长度大于3的元素 |
<AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//CCC | //BBB |
---|
选择所有的CCC和BBB元素 |
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/EEE | //BBB |
---|
选择所有的BBB元素和所有是AAA的子元素的EEE元素 |
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/EEE | //DDD/CCC | /AAA | //BBB |
---|
可以合并的路径数目没有限制 |
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA |
---|
等价于 /child::AAA |
<AAA> <BBB/> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/child::AAA |
---|
等价于/AAA |
<AAA> <BBB/> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/BBB |
---|
等价于/child::AAA/child::BBB |
<AAA> <BBB/> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/child::AAA/child::BBB |
---|
等价于/AAA/BBB |
<AAA> <BBB/> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/child::AAA/BBB |
---|
二者都可以被合并 |
<AAA> <BBB/> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/descendant::* |
---|
选择文档根元素的所有后代.即所有的元素被选择 |
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/BBB/descendant::* |
---|
选择/AAA/BBB的所有后代元素 |
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//CCC/descendant::* |
---|
选择在祖先元素中有CCC的所有元素 |
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//CCC/descendant::DDD |
---|
选择所有以CCC为祖先元素的DDD元素 |
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//DDD/parent::* |
---|
选择DDD元素的所有父节点 |
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/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> |
在XLab中打开实例 | 树视图 (JPG) |
//FFF/ancestor::* |
---|
选择FFF元素的祖先节点 |
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/BBB/following-sibling::* |
---|
<AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//CCC/following-sibling::* |
---|
<AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/AAA/XXX/preceding-sibling::* |
---|
<AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//CCC/preceding-sibling::* |
---|
<AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
/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> |
在XLab中打开实例 | 树视图 (JPG) |
//GGG/preceding::* |
---|
<AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
/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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
/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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//BBB[position() mod 2 = 0 ] |
---|
选择偶数位置的BBB元素 |
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> <BBB/> <BBB/> <BBB/> <BBB/> <CCC/> <CCC/> <CCC/> </AAA> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
//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> |
在XLab中打开实例 | 树视图 (JPG) |
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于