原始文档:
<div class='master'>
<div class='recordBlock' id='gf5rtf4'/>
<div id='d3dre'>First block</div>
<div id='fa2s2w'>Second Block</div>
<div class='recordBlock' id='fred11' />
<div id='asd423'>Third block</div>
</div>
我正在尝试找出id为gf5rtf4的recordBlock下的两个div元素的xpath,也就是说,只有id为d3dre和fa2s2w的div,而不是第三个div asd423。
尽管这不能明确,因为我还需要使用相同的Xpath表达式对ID为fred11的recordBlock运行,以返回ID为asd423的元素。
建议的链接不符合问题标准,表达的链接涉及嵌套元素,我提出的问题提出了非嵌套元素的问题(在层次结构中的同一级别),但由class = recordBlock分隔并带有指定的id值,以返回分隔符之间的同级。
老实说,我什至不知道如何开始,每个recordBlock下的divs在概念上都是嵌套的,但在文档中却不是这样(可以看到)
答案 0 :(得分:1)
这里是xpath,用于获取两个节点之间的同级div。
使用Xpath 1:
//div[@class='master']/div[not(@class = 'recordBlock')][ count(../div[@class='recordBlock'][3]/preceding-sibling::*) = count(preceding-sibling::div[@class='recordBlock'][1] /following-sibling::div[@class='recordBlock'][1]/preceding-sibling::*)]
================================================ ==========================
使用Xpath 2:
注意:我们已将 x 替换为下一个recordBlock位置,直到您需要div为止。
//div[@class='master']/div[not(@class = 'recordBlock')][generate-id(../div[@class='recordBlock'][x])= generate-id(preceding-sibling::div[@class='recordBlock'][1]/following-sibling::div[@class='recordBlock'][1])]
如果您希望直到第二个recordBlock
的兄弟姐妹(意味着第一和第二记录块之间的任何内容),请检查以下xpath。
//div[@class='master']/div[not(@class = 'recordBlock')][generate-id(../div[@class='recordBlock'][2]) = generate-id(preceding-sibling::div[@class='recordBlock'][1]/following-sibling::div[@class='recordBlock'][1])]
我知道您正在思考最后一个应该给什么,就像我上面提到的,它总是+1
,因此您必须指定3
或any number >2
应该起作用。 / p>
//div[@class='master']/div[not(@class = 'recordBlock')][generate-id(../div[@class='recordBlock'][3]) = generate-id(preceding-sibling::div[@class='recordBlock'][1]/following-sibling::div[@class='recordBlock'][1])]
请注意::无论指定项目(在这种情况下为recordBlock
之间的选择性节点的数量(在这种情况下为div),该方法都将起作用。
答案 1 :(得分:0)
您应该尝试类似的操作
//div[@class="recordBlock"]/following-sibling::div[not(@class)]
输出为...
第一块第二块第三块