2012-04-11 46 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,並且這次它工作。希望這只是我自己的時間浪費在這件事上。

相關問題