2010-08-18 35 views
0

嗨我試圖解析一個xml提要在php中使用simplexml。 XML供稿佈局爲如下:使用SimpleXML循環通過多個條目

<Member> 
    <MemberType>Full</MemberType> 
    <JoinDate>2010-06-12</JoinDate> 
    <DataType>A</DataType> 
    <Data> 
     <FirstName>Ted</FirstName> 
     <LasttName>Smith</LasttName> 
     <Data1>56</Data1> 
     <Data2>100</Data2> 
     <Data3>120</Data3> 
    </Data> 
</Member> 
<Member> 
    <MemberType>Full</MemberType> 
    <JoinDate>2010-06-12</JoinDate> 
    <DataType>B</DataType> 
    <Data> 
     <FirstName>Ted</FirstName> 
     <LasttName>Smith</LasttName> 
     <Data1>57</Data1> 
     <Data2>110</Data2> 
     <Data3>130</Data3> 
    </Data> 
</Member> 
<Member> 
    <MemberType>Full</MemberType> 
    <JoinDate>2010-06-12</JoinDate> 
    <DataType>C</DataType> 
    <Data> 
     <FirstName>Ted</FirstName> 
     <LasttName>Smith</LasttName> 
     <Data4>58</Data4> 
     <Data5>115</Data5> 
     <Data6>230</Data6> 
    </Data> 
</Member> 

其中該構件元件循環一遍又一遍在XML文檔,但是數據內它的變化。我試圖做的是將某些成員的所有數據輸入到sql數據庫中。所以理想情況下,我想在db中的所有行中輸入。 xml提要包含不同的成員類型,如「完整」或「關聯」。

目前我正試圖循環所有正式成員,並獲取此特定成員的所有數據。每個成員的數據被分成每個具有一個獨立的構件標籤三個部分,所以上述泰德布羅格斯在三個部件的標籤,其中,數據類型爲A,B和C

$PLF = simplexml_load_file('../XML/Members.xml'); 

foreach ($PLF->Root->xpath('//Member') as $member) { 

    if ($member->MemberType == 'Full') { 


     echo $member->MemberType.'<br/>'; 
     echo $member->JoinDate.'<br />'; 
     echo $member->DataType.'<br/>'; 
     echo $member->Data->FirstName.'<br/>'; 
     echo $member->Data->LastName.'<br/>'; 
     echo $member->Data->Data1.'<br/>'; 
     echo $member->Data->Data2.'<br/>'; 
     echo '<br />'; 


     }} 

代碼我有在有數據時刻只能從每個循環中的第一個類型(類型A)中提取數據,而且我真的想要將所有類型A,B和C合併到同一個循環中。因此,我可以將每個成員(如Ted Smith)的所有數據都集中到數據庫中的一行中。

回答

1

我使用簡單的xml來讀取一些遠程文件,並通過它們循環。這是我的代碼:

  $sUrl  = "some url"; 
     $sContent = file_get_contents($sUrl); 

     $oXml  = new SimpleXMLElement($sContent); 

     $aReturn = array(); 

     foreach ($oXml->children() as $oStation) 
     { 
      $iRackId = (int)$oStation->rack_id; 
      $dLong  = (double)str_replace(",", ".", $oStation->longitute); 
      $dLati  = (double)str_replace(",", ".", $oStation->latitude); 
      $sDescription = (string)$oStation->description; 

      $aRes = array(); 
      $aRes['rack_id']  = $iRackId; 
      $aRes['longitute']  = $dLong; 
      $aRes['latitude']  = $dLati; 
      $aRes['description'] = utf8_decode($sDescription); 

      if ($dLong > 0 && $dLati > 0) 
       $aReturn[$iRackId] = $aRes; 
     } 

我所做的是我把XML文件的結果放入一個數組中。在後面的代碼中,我也將這些數據保存到數據庫中。

希望這對你有所幫助。我不使用xpath ...除了問題外沒有其他任何東西,也沒有時間將它們整理出來。這似乎對我來說雖然。

Br, Paul Peelen