2 回答
TA贡献1895条经验 获得超7个赞
您可以将所有值映射到一个数组,然后使用max和min函数:
<?php
$xml = <<<XML
<?xml version='1.0'?>
<device-list>
<device name="Voltage Converter" quantity="2" serial_number="20011">
<weight units="pounds">3.00</weight>
</device>
<device name="24-port switch" quantity="2" serial_number="24PORTSW-004">
<weight units="pounds">3.34</weight>
</device>
</device-list>
XML;
$simpleXml = simplexml_load_string($xml);
$weights = array_map(function($elem) {
return $elem->__toString();
}, $simpleXml->xpath('//weight[@units="pounds"]'));
echo "Min: " .min($weights) . "<br/>";
echo "Max: " .max($weights);
输出:
最低:3.00
最大值:3.34
TA贡献1780条经验 获得超1个赞
我正在添加这个纯 XPath 1.0 答案,因为在这种情况下,评论中链接的答案是错误的。最大值的一般成语:
($node-set[not(. < $node-set)])[1]
含义:
从节点集中选择第一个(按文档顺序),其数值不小于节点集中的任何其他节点。
对于您的输入(现在格式正确):
<f:device-list xmlns:f="dummy">
<f:device name="Voltage Converter" quantity="2" serial_number="20011">
<f:weight units="pounds">3.00</f:weight>
</f:device>
<f:device name="24-port switch" quantity="2" serial_number="24PORTSW-004">
<f:weight units="pounds">3.34</f:weight>
</f:device>
</f:device-list>
这个 XPath 1.0 表达式(f前缀绑定到dummy命名空间 URI):
(//f:weight[@units='pounds'][not(. < //f:weight[@units='pounds'])])[1]
它选择:
<f:weight xmlns:f="dummy" units="pounds">3.34</f:weight>
签入http://www.xpathtester.com/xpath/1969ef047d90f2efbb0dcc1d1e131428
请注意:位置谓词(如[1]缩写形式)对位置步轴起作用,这意味着如果集合中的所有节点都是第一个子节点,那么您将需要括号来获得文档顺序中的第一个。
- 2 回答
- 0 关注
- 335 浏览
添加回答
举报