2010-08-18 6 views
0

Hi Je tente d'analyser un flux xml à l'aide de simplexml en php. Le flux xml est aménagé comme suit:Utilisation de SimpleXML pour effectuer une boucle sur plusieurs entrées

<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> 

où l'élément membre boucle sur et encore dans le doc xml, mais les données à l'intérieur change. Ce que j'essaie de faire est d'entrer toutes les données pour certains membres dans une base de données SQL. Donc, idéalement, je veux entrer tout cela dans une ligne dans la DB. Le flux xml contient différents types de membres, tels que "complet" ou "associé". En ce moment, j'essaie de parcourir tous les membres à part entière et d'obtenir toutes les données pour ce membre en particulier. Les données pour chaque élément est divisé en trois parties chacune avec un marqueur élément séparé, de sorte que ci-dessus Ted Bloggs a des données en trois balises membres, où le type de données est A, B et 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 />'; 


     }} 

le code i ai au moment ne peut que tirer des données du premier type (type A) dans chaque boucle, et je veux vraiment combiner tous les types A, B et C dans la même boucle. Donc, je peux obtenir toutes les données pour chaque membre comme Ted Smith en une seule ligne dans la base de données.

Répondre

1

J'utilise un simple fichier XML pour lire certains fichiers distants et les lire en boucle. Ceci est mon code:

  $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; 
     } 

Ce que je fais est de mettre le résultat du fichier XML dans un tableau. Plus tard dans le code, je sauvegarde également ces données dans la base de données.

J'espère que cela vous a aidé. Je n'utilise pas xpath ... je n'ai eu que des problèmes et je n'ai pas eu le temps de les résoudre. Cela semble fonctionner pour moi cependant.

Br, Paul Peelen