可能的重复:
PHP SimpleXML。如何获取最后一项
XSLT选择包含特定子字符串的所有节点
我需要查找类为"myClass"的最后一个span元素的内容。我试过各种组合,但都找不到答案。
//span[@class='myPrice' and position()=last()]
这将返回类为"myClass"的所有元素,我猜这是因为每个找到的元素都是处理时的最后一个元素,但我只需要最后一个实际匹配的元素。
您必须标记要将//span[@class='myPrice']
视为当前集的处理器,然后将谓词position((=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;
}
您使用的表达式表示"选择每个span元素,前提是(a(它有@class='myprice'
,并且(b(它是其父元素的最后一个子元素
(1( 您需要在@class过滤后应用过滤器[position()=last()]
,而不是将其应用于所有跨度元素
(2( 形式为CCD_ 4的表达式表示选择每个元素的最后一个子跨度的CCD_。您需要使用括号来更改优先级:(//span)[last()]
。
因此,表达式变为由VolkerK给出的(//span[@class='myPrice'])[last()]
。