(反向)遍历XPath查询,用于访问具有特定文本值的DIV

时间:2019-03-05 04:28:08

标签: html xpath

DOM一起使用100次以上的HTML循环,如下所示:

<div class="intro"> 
  <div class="header"> 
     <h1 class="product-code"> <span class="code">ZY001</span> <span class="intro">ZY001 Title/Intro</span> </h1> 
  </div> 
<div> 
<table> 
<tbody>
   <tr> 
        <td>Available</td>
        <td> S </td>
        <td> M </td>
        <td> XL </td>
  </tr> 

我以前曾使用此XPath查询来获取所有节点值(与可能包含在Available中的变量节点有关的DOM查询的所有100多个实例

//div[@class='intro']/div/table/tbody/tr/td[contains(text(),'Available')]/following-sibling::td
  

object(DOMNodeList)[595]     public'length'=>整数591

现在,我需要专门针对product-code / code来检索特定td的所有code属性

因为包含唯一标识符的div(在上面的示例中,ZY001)不是直接祖先,所以我想我必须进行反向XPath查询

这是我的尝试之一:

//h1[@class='product-code']/span[contains(@class, 'code') and text() = 'ZY001']/../../div[@class='intro']/div/table/tbody/tr/td[contains(text(),'Available')]/following-sibling::td

当我定义/span[contains(@class, 'code') and text() = 'ZY001'],然后尝试使用/../../向后遍历dom两次时,我希望/期望返回带有文本{{的div [@ class ='intro']] 1}},或者更确切地说是ZY001

但是到目前为止,我所有的尝试都产生了public 'length' => int 1个结果。不是0,表示XPath不正确,而是false

如何修改XPath查询以获取多个0中包含<div class="intro"> / <h1 class="product-code">文本值{{1}的单个实例}?

2 个答案:

答案 0 :(得分:1)

使用

//h1[@class='product-code']/span[contains(@class, 'code') and text() = 'ZY001']/../../../div/table/tbody

代替

//h1[@class='product-code']/span[contains(@class, 'code') and text() = 'ZY001']/../../div[@class='intro']/div/table/tbody

答案 1 :(得分:1)

您可以使用以下任何xpath:

//div[@class='intro' and //h1[@class='product-code']/span[@class='code' and text()='ZY001']]//tbody/tr[td[text()='Available']]/td[2]

//div[@class='intro' and //span[@class='code' and text()='ZY001']]//tbody/tr[td[text()='Available']]/td[2]

//div[@class='intro' and //span[@class='code' and text()='ZY001']]//tr[td[text()='Available']]/td[2]

td[2]更改为td[3]td[4]分别获得第3个和第4个td