0

我有一个表,其值是从 XML 文件加载的,需要添加价格字段值才能得到总计。我一直在寻找和查看示例,但我不清楚。我怎样才能添加这个精确字段?

XML

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <libro>
        <autor><![CDATA[Cervantes]]></autor>
        <titulo><![CDATA[El Quijote]]></titulo>
        <precio>30€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Calderón de la Barca]]></autor>
        <titulo><![CDATA[La vida es sueño]]></titulo>
        <precio>25€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Garcilaso de la vega]]></autor>
        <titulo><![CDATA[Egoglas]]></titulo>
        <precio>15€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Raymond Carver]]></autor>
        <titulo><![CDATA[Catedral]]></titulo>
        <precio>16€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[George Orwell]]></autor>
        <titulo><![CDATA[1984]]></titulo>
        <precio>10€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Fidor Dostoyevski]]></autor>
        <titulo><![CDATA[Crimen y Castigo]]></titulo>
        <precio>35€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Juan Ponce]]></autor>
        <titulo><![CDATA[Cronica de la intervencion]]></titulo>
        <precio>25€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Yukio Mishima]]></autor>
        <titulo><![CDATA[Confesiones de una mascara]]></titulo>
        <precio>22€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Elfriede Jelinek]]></autor>
        <titulo><![CDATA[Deseo]]></titulo>
        <precio>20€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Bram Stoker]]></autor>
        <titulo><![CDATA[Dracula]]></titulo>
        <precio>18€&lt;/precio>
    </libro>
</root>

PHP

<?         
   ini_set('error_reporting', E_ALL ^ E_NOTICE);
   ini_set('display_errors','on'); 
           ob_start();
           $dom=new DOMDocument();
           $dom->load('xml/libros.xml');
           $libros=$dom->getElementsByTagName('libro');
           $i=0;
           echo "<table cellspacing='2'>";
           foreach ($libros as $libro) {
               $autores=$libro->getElementsByTagName('autor');
               $autor=$autores->item(0)->nodeValue;
               $titulos=$libro->getElementsByTagName('titulo');
               $titulo=$titulos->item(0)->nodeValue;
               $precios=$libro->getElementsByTagName('precio');
               $precio=$precios->item(0)->nodeValue;
               echo "<tr id='fila".$i."'>";
               echo "<td>".$autor."</td>";
               echo "<td>".$titulo."</td>";
               echo "<td>".$precio."</td>";
               echo "</tr>";
               $i++;
           }
           echo "</table>";
           $tabla=ob_get_contents();
           ob_end_clean();
           $console="Toda va ok";
           $aValores=array('tabla'=> $tabla,'console'=>$console);
           echo json_encode($aValores);  
?>
4

1 回答 1

0

根据文档,xpath 应该是sum(//precio).
不过,我无法让它工作。所以我选择了一种不太优雅但实用的方法:

$xml = simplexml_load_string($xmlstr);
$sum = 0;
$h = "<table>";

foreach ($xml->libro as $book) {

    $h .= "<tr><td>".$book->autor."</td><td>".$book->titulo."</td><td>".$book->precio."</td></tr>";

    $sum += $book->precio;
}

$h .= "<tr><td colspan=\"2\">sum:</td><td>$sum</td></tr></table>";
echo $h;

我更simplexml喜欢dom. 如果你看看我的代码,你就会明白为什么 ;-)
这是一个生活演示:http ://codepad.viper-7.com/q3drF5

于 2013-03-23T20:07:13.280 回答