Похоже, ваш номер читается как строка, это происходит с числами, когда вы используете для них регулярные выражения.Вы можете использовать (int) $ num, чтобы вернуть его в число.
Однако вы никогда не должны использовать preg в xml, вы должны использовать DOMDocument (simpleXML тоже работает, но моя любимая - DOMDOcument)
Напримересли бы ваши байтовые атрибуты были на xml-узле bytestore, вы бы сделали:
$bytes = (int)0;
$xml = new DOMDocument();
$xml->load($variableholdingxml); //can be url of xml file also
foreach($xml->getElementsByTagName('bytestore') as $holder)
{
$bytes = $bytes + (int)$holder->getAttribute('bytes');
}
return $bytes;
Добавлено в ответ на комментарий Обычно для анализа больших файлов требуется некоторое время, хотя янет эксперта по скорости методов DOMDocument. Запросы xpath могут быть немного быстрее.
$xml = new DOMDocument();
$xml->load($variableholdingxml); //can be url of xml file also
$xpath = new DOMXPath();
$q = "//root/parentnode/childnode/byteholdnode/";
$nodes = $xpath->query($q);
foreach($nodes as $node)
{
$bytes = $bytes + (int)$node->getAttribute('bytes');
}
Если ваш атрибут байтов находится в узле байтового узла в узле weholdbytes здесь, с поддеревьями корня дерева, запрос будетbe:
$q = "//root/subtrees/weholdbytes/byteholder/"; /* yes that was supposed to make it clearer.*/
В любом случае, напишите мне в комментариях, если вам нужна дополнительная помощь.