2012-11-21 64 views
1

我有XML文件。这是电影放映时间,我尝试解析。XML解析器PHP.Syntax错误?

<?xml version="1.0" encoding="UTF-8"?> <billboard> 
    <genres> 
<shows> 
<show id="160576" film_id="5710" cinema_id="89" hall_id="241"> 
       <begin>2012-11-15</begin> 
       <end>2012-11-18</end> 
       <times> 
              <time time="12:30:00"> 
          <prices>30, 55</prices> 
          <note><![CDATA[]]></note> 
         </time> 
              <time time="14:45:00"> 
          <prices>30, 55</prices> 
          <note><![CDATA[]]></note> 
         </time> 
              <time time="17:00:00"> 
          <prices>30, 55</prices> 
          <note><![CDATA[]]></note> 
         </time> 
              <time time="23:45:00"> 
          <prices>30, 55</prices> 
          <note><![CDATA[]]></note> 
         </time> 
            </times> 
      </show> 

我分析我的XML和回声content.But我不能回声“时间”和“价格”。之后插入代码“//回波时间和价格//”脚本不起作用(白屏) 。请帮忙。 P.S.对不起我的英语不好。

$xmlstr = file_get_contents('test.xml'); 
$x = new SimpleXMLElement($xmlstr); 
$id_f = 89; 
$cinema_id = "//show[@cinema_id=".$id_f."]"; 

$cinema=$x->xpath($cinema_id); 
///////////////////////start///////////////////////////////////////////// 
foreach($cinema as $cinema) 
     { 
///////////string/////////////////// 
$begin_m = $cinema[0]->begin; 
$end_m = $cinema[0]->end; 
$film_id_m = $cinema[0]['film_id']; 


/////////echo////////////////////// 
echo "<b>Begin: </b>".$begin_m."<br>"; 
echo "<b>End: </b>".$end_m."<br>"; 
echo "<b>ID film: </b>".$film_id_m."<br>"; 
/////////echo time and price/// 

    foreach($cinema[0]->times->time as $k){ 
    $obj=current($k); 
    $time_b = $obj['time']."\n"; 

    echo "Time: "$time_b."<br>"; 
    foreach($cinema[0]->times as $price){ 

    echo "Price: "$price[0]->pices."<br>"; 



} 
///////////// 

    echo "<hr>"; 
} 

} 

回答

1

有在你的代码的语法错误,导致500内部服务器错误(显示了白屏)。

语法错误1:

echo "Time: ".$time_b."<br>"; 
      //^you were missing this 

语法错误2:

echo "Price: ".$price[0]->pices."<br>"; 
      //^you were missing this 

而且,在你的foreach循环,您指定的元素相同的变量名,你的循环数组。这不会导致错误,但这意味着你的$cinema数组在循环之后死了,它将被设置为最后一个元素的值。给它一个不同的名称:

foreach($cinema as $cinemaItem) 

修正了这些问题,您的代码将按照您的预期输出。在未来,你应该检查你的错误日志或打开,因为他们会告诉你在句法错误错误:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
+0

谢谢你,我真的很感激 – parks

+0

@parks,没问题:) – MrCode