php простой xml номер дочернего узла плюс - PullRequest
0 голосов
/ 23 октября 2011

Я хочу использовать php simple xml, разобрать какое-то дерево вот так.

как сложить все tree->item->object->num?

Я хочу получить int 16 (2 + 4 + 7 + 2 + 1)

<tree>
  <item>
    <object>
      <num>2</num>
    </object>
    <object>
      <num>4</num>
    </object>
  </item>
  <item>
    <object>
      <num>7</num>
    </object>
    <object>
      <num>2</num>
    </object>
  </item>
  <item>
    <object>
      <num>1</num>
    </object>
  </item>
</tree>

Ответы [ 3 ]

4 голосов
/ 23 октября 2011
$xml = new SimpleXMLElement($yourXMLString);

$acc = 0;
foreach($xml->item as $item)
{
    foreach($item->object as $object)
    {
        $acc += $object->num;
    }
}

echo $acc; // 16
2 голосов
/ 23 октября 2011

Простая / некрасивая версия:

$dom = new DOMDocument();
$dom->loadXML($your_xml);

$xp = new DOMXPath($dom);

$nums = $xp->query('//num');
$sum = 0;
foreach($nums as $num) {
   $sum += $num->nodeValue;
}
echo $sum;
0 голосов
/ 23 октября 2011
$tree = simplexml_load_string($xmlstring);
$nums = $tree->xpath('/tree/item/object/num');

// Array functions to sum the numbers
$sum = array_sum(array_map('intval', $nums));

// or, Loop to sum the number
$sum = 0;
foreach ($nums as $num) {
    $sum += $num;
}
...