1

好的,可以说我有一个看起来像这个例子的xml,

   <?xml version="1.0" encoding="UTF-8"?>

   <stats id="865" name="blaah">
       <example name="blaahblaah">
           <example1>
               <x ppoints="500"/>
           </example1>
           <example2>
               <x ppoints ="150"/>
               <x points ="500"/>
               <x ppoints ="140"/>
               <x points="200"/>
           </example2>
       </example>
   </stats>

我在这里要做的是获取所有点并将它们四舍五入为一个数字和所有点并将它们四舍五入为一个数字,就像这样

统计数据:“四舍五入” pp & “四舍五入” p

帮助任何人?非常感谢

4

1 回答 1

2

在这种情况下,据我了解文档的结构可以包含多个“示例”节点,我认为最好的方法是加载 XML 文档并使用 XPath 表达式来获取具有ppoints属性和points属性的所有节点。

使用 XPath 有两种可能的解决方案。一种使用SimpleXMLElement::xpath检索所有必需的节点并手动对它们求和。另一个使用DOMXPath::evaluate允许评估任何类型的 XPath 表达式并仅使用 XPath 对值求和。后一种解决方案更简单。

DOMXPath::评估

<?php

$doc = new DOMDocument;
$doc->load('file.xml');
$xpath = new DOMXPath($doc);

$sum_ppoints = $xpath->evaluate('sum(//x/@ppoints)');
$sum_points = $xpath->evaluate('sum(//x/@points)');

print "Ppoints: $sum_ppoints; Points: $sum_points\n";

?>

SimpleXMLElement::xpath

<?php

// Load XML file
$file = "file.xml";
$content = file_get_contents($file);
$xml = new SimpleXMLElement($content);

// Compute sum ppoints
$sum_ppoints = 0;
$nodes = $xml->xpath('//x[@ppoints]');
foreach ($nodes as $node) {
    $sum_ppoints += $node->attributes()->ppoints;
}

// Compute sum points
$sum_points = 0;
$nodes = $xml->xpath('//x[@points]');
foreach ($nodes as $node) {
    $sum_points += $node->attributes()->points;
}

print "Ppoints: $sum_ppoints; Points: $sum_points\n";

?>
于 2012-12-11T23:50:52.637 回答