与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}的单个实例}?
答案 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