2009-09-28 64 views
3

任何人都可以告诉我它是否可以从此html片段中仅选择div 2a和2b? 问题是div不是h4元素的子元素,所以xpath查询应该像“获取位于h4 ='Two'和h4之间的h4'''h'='Two' 请注意我希望查询是动态的和u告诉她开始元素(H4 =“两课”)和结束元素(任何H4),然后在其上过滤得到的元素。Xpath获取介于2个元素之间的元素

<h4>One</h4> 
<div>1a</div> 
<div>1b</div> 
<div>1c</div> 
<h4>Two</h4> 
<div>2a</div> 
<div>2b</div> 
<h4>Three</h4> 
<div>3a</div> 
<div>3b</div> 
<div>3c</div> 
+2

XPath 1.0 or 2.0? – 2009-09-28 21:10:27

回答

9
div[preceding-sibling::h4[1] = 'Two'] 
+0

我认为这将得到元素3a,3b,3c 我只需要元素2a和2b 也是什么[1]在h4 [1]意味着什么? – Karim 2009-09-28 21:29:18

+3

'prior-sibling :: h4 [1]'表示在'h4'之前的_first_。因此,对于3a/3b/3c,它将是'

三个

',这就是为什么它们不会出现在结果中。还要注意,这个查询还将选择节点“在最后” - 即那些在“

”之前的节点,但是之后没有。如果你想检查一下,那么在过滤器中加入'[...和following-sibling :: h4]'应该可以做到。 – 2009-09-28 21:41:21

5
div[preceding-sibling::h4='Two' and following-sibling::h4='Three'] 
+1

这将工作,但我需要它是通用的。 我的意思是它确定前面的兄弟是由文本'两' 搜索,但我需要以下s步是任何结局

和没有过滤的文字 – Karim 2009-09-28 21:31:48