2012-04-11 31 views
0

我可以从xml中获取除所有<项目>数据以外的数据。下面的代码只获取最后一个的数据。我认为foreach会为每个人都得到它,但似乎没有。我无法从一个xml文件中获取所有数据用php

<magic5Out version="2.1.0"> 
<Report customerPK="Survey_2" locationPK="229" userId="2299" template="13600" formDate="2012-04-11T00:00:00" dateTimeStarted="2012-04-11T07:34:04" dateTimeMobileReleased="2012-04-11T07:37:03" currentStatus="5" reportGuid="b174d011-77bb-4882-b87e-a2c60bdf265d"> 
    <Results> 
     <Item itemPK="SurveyTab_9"> 
      <q1 listEntry="1.8m" listEntryId="239107"/> 
      <q1Comments text=""/> 
      <q2 listEntry="Green" listEntryId="239113"/> 
      <q2Comments text=""/> 
      <item_comments text="test"/> 
     </Item> 
     <Item itemPK="SurveyTab_24"> 
      <q1 listEntry="2.2m" listEntryId="239108"/> 
      <q1Comments text=""/> 
      <q2 listEntry="Silver" listEntryId="239112"/> 
      <q2Comments text=""/> 
      <item_comments text=""/> 
     </Item> 
     <Item itemPK="SurveyTab_10"> 
      <q1 listEntry="3.0m" listEntryId="239110"/> 
      <q1Comments text=""/> 
      <q2 listEntry="White" listEntryId="239111"/> 
      <q2Comments text=""/> 
      <item_comments text="No feed"/> 
     </Item> 
     <Item itemPK="SurveyTab_23"> 
      <q1 listEntry="2.2m" listEntryId="239108"/> 
      <q1Comments text=""/> 
      <q2 listEntry="Green" listEntryId="239113"/> 
      <q2Comments text=""/> 
      <item_comments text=""/> 
     </Item> 
    <surveyorComments0 text="testing"/> 
    <surveyorName text="NICK"/> 
    <surveyorSig opFile="D:\Sites\WebApp_eden\Output\2100\XMLSurvey\Attachments\1cf582f9-776c-472e-b8ce-877a51fae5e1.png"/> 
    </Results> 
</Report> 
</magic5Out> 

这里是我使用的PHP:

$xml = simplexml_load_file($xml_file); 
/* more code here that works OK */ 
foreach($xml->Report->Results->Item as $tab) { 
    $tab_name = (string) $tab['itemPK']; 
    $q1_result = $tab->q1['listEntry']; 
    $q2_result = $tab->q2['listEntry']; etc. 
    $q1_comment = escape_data($tab->q1Comments['text']); 
    $q2_comment = escape_data($tab->q2Comments['text']); 
    $item_comment = escape_data($tab->item_comments['text']); 
} 
+0

你能解决这个问题吗? – Stony 2012-04-12 08:09:37

回答

1

当你犯了一个循环,并定义一个变量,那么你在你的情况下,有从您的变量循环中的最后一个值。

您每次都会覆盖您的变量。

foreach($xml->Report->Results->Item as $tab) { 
    $tab_name[] = (string) $tab['itemPK']; 
    $q1_result[] = $tab->q1['listEntry']; 
    $q2_result[] = $tab->q2['listEntry']; etc. 
    $q1_comment[] = escape_data($tab->q1Comments['text']); 
    $q2_comment[] = escape_data($tab->q2Comments['text']); 
    $item_comment[] = escape_data($tab->item_comments['text']); 
} 

尝试这样的事情。然后你有一个包含所有值的数组。

+0

谢谢Stony,我试过这个,但是和以前一样,它只是从第一个Item获取值,但将它们存储在数组中而不是字符串中,即每个数组中只有一个值。 (如果它覆盖了它们,我会预料它会以最后一项的值为结尾) – 2012-04-12 09:35:21

+0

很奇怪。我用你的XML试了一下,我得到了所有的元素。你有没有检查你的日志? – Stony 2012-04-12 12:05:33

+0

我很迷惑,但它现在正在处理我的原始代码!没有记录错误 - 它只是没有循环通过项目的所有实例,或者,正如你所建议的,它覆盖了它们。太忙了赶上工作进一步调查一旦它的工作,所以它仍然是一个谜 – 2012-04-13 13:10:50

0

在代码的其他地方一定有其他东西搞砸了 - 我尝试了一些其他的东西,并最终恢复到我上面发布的php,并且这次它工作。希望这只是我自己的时间浪费在这件事上。