在XPath中,如何获取最高值的节点?例如
<tr>
<td>$12.00</td>
<td>$24.00</td>
<td>$13.00</td>
</tr>
将返回 $24.00。
我正在使用 PHP DOM,所以这将是 XPath 1.0 版。
最佳答案
我在尝试为您提出最优雅的解决方案时花费了最后一点时间。如您所知,max
在 XPath 1.0 中不可用。我尝试了几种不同的方法,其中大部分似乎都不是很有效。
<?php
$doc = new DOMDocument;
$doc->loadXml('<table><tr><td>$12.00</td><td>$24.00</td><td>$13.00</td></tr></table>');
function dom_xpath_max($this, $nodes)
{
usort($nodes, create_function('$a, $b', 'return strcmp($b->textContent, $a->textContent);'));
return $this[0]->textContent == $nodes[0]->textContent;
}
$xpath = new DOMXPath($doc);
$xpath->registerNamespace('php', 'http://php.net/xpath');
$xpath->registerPHPFunctions('dom_xpath_max');
$result = $xpath->evaluate('//table/tr/td[php:function("dom_xpath_max", ., ../td)]');
echo $result->item(0)->textContent;
?>
或者,您可以使用 foreach
循环遍历更简单的 XPath 表达式的结果(一次只选择所有 TD 元素)并找到最大的数字。
<?php
...
$xpath = new DOMXPath($doc);
$result = $xpath->evaluate('//table/tr/td');
$highest = '';
foreach ( $result as $node )
if ( $node->textContent > $highest )
$highest = $node->textContent;
echo $highest;
?>
您还可以使用 XSLTProcessor 类和一个 XSL 文档,该文档使用 exslt.org 中的 math:max 函数但我已经尝试过了,但由于美元符号 ($) 的缘故无法使其正常工作。
我已经测试了这两种解决方案,它们对我来说效果很好。
关于php - 使用 XPath 获取最高值节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381030/