php - 使用 XPath 获取最高值节点

标签 php xml dom xpath

在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/

相关文章:

php - 我怎样才能隐藏$_SERVER ['HTTP_REFERER']

php - 查询在 Eloquent laravel 中选择 id 为 max 和 where 子句的数据

php - 数据库 |来自两个表的条​​件查询

java - 将递归 XML 与 POJO 相互转换

c# - 从 asp.net 中的 Xdocument 中的复杂 Xml 获取特定标记值

javascript - ajax成功后jQuery继续循环执行

php - 如何在php中获得工作日?

android - 如何从 cordova 中的 plugin.xml 向 android Activity 添加属性?

javascript - 视口(viewport)与窗口与文档

javascript - jQuery 对象和 DOM 元素有什么区别? .get() 和 .index() 的区别?