我需要使用'myClass'类找到最后一个span元素的内容.我尝试了各种组合但找不到答案.
//span[@class='myPrice' and position()=last()]
Run Code Online (Sandbox Code Playgroud)
这将返回所有带有'myClass'类的元素,我猜这是因为每个找到的元素都是处理时的最后一个 - 但我只需要实际的最后一个匹配元素.
Vol*_*erK 50
您必须标记要//span[@class='myPrice']
作为当前集处理的处理器,然后将谓词位置()= last()应用于该集.
(//span[@class='myPrice'])[last()]
例如
<?php
$doc = getDoc();
$xpath = new DOMXPath($doc);
foreach( $xpath->query("(//span[@class='myPrice'])[last()]") as $n ) {
echo $n->nodeValue, "\n";
}
function getDoc() {
$doc = new DOMDOcument;
$doc->loadxml( <<< eox
<foo>
<span class="myPrice">1</span>
<span class="yourPrice">0</span>
<bar>
<span class="myPrice">4</span>
<span class="yourPrice">99</span>
</bar>
<bar>
<span class="myPrice">9</span>
</bar>
</foo>
eox
);
return $doc;
}
Run Code Online (Sandbox Code Playgroud)
您使用的表达式意味着"选择每个span元素,只要它有(a)它有@class='myprice'
,并且(b)它是其父级的最后一个子级.有两个错误:
(1)您需要在使用[position()=last()]
@class 过滤后应用过滤器,而不是将其应用于所有span元素
(2)形式的表达//span[last()]
是指/descendant-or-self::*/(child::span[last()])
,其选择的每个元素的最后一个子跨度.您需要使用括号来更改优先级: (//span)[last()]
.
所以表达式(//span[@class='myPrice'])[last()]
就像VolkerK给出的那样.
归档时间: |
|
查看次数: |
24688 次 |
最近记录: |