Autor Zpráva
Jakub Man
Profil
Dobrý den,
Tvořím script, který bude schopný brát data ze XML feedu dodavatele, některé data změnit a zapsat do nového XML souboru.
Bohužel, výsledný XML mi vždy vypíše jen poslední produkt. Nicméně výstup příkazem echo funguje.

Výsledný XML soubor : http://data.fleximedia.cz/scripts/vystup.xml
Výstup příkazu echo : http://data.fleximedia.cz/scripts/xmlfeed.php

Kód :
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>FlexiMedia XML importer</title>
</head>
<body>
<?php 
$doc = new DOMDocument(); 
$doc->load( 'http://www.redo.cz/publicdoc/cz_complete_03_nw.xml' ); 
   
$shop = $doc->getElementsByTagName( "product" ); 
foreach( $shop as $product ) 
{ 
  $nazvy = $product->getElementsByTagName( "nazev" ); 
  $nazev = $nazvy->item(0)->nodeValue; 
   
  $kody= $product->getElementsByTagName( "kod" ); 
  $kod= $kody->item(0)->nodeValue; 
   
  $popisy = $product->getElementsByTagName( "popis" ); 
  $popis = $popisy->item(0)->nodeValue; 
  
  $shortpopisy = $product->getElementsByTagName( "popisshort" ); 
  $popisshort = $shortpopisy->item(0)->nodeValue; 
  
  $stavskladu = $product->getElementsByTagName( "stav" ); 
  $stav = $stavskladu->item(0)->nodeValue;   
   
  $kategorie = $product->getElementsByTagName( "category" ); 
  $category = $kategorie->item(0)->nodeValue;   
   
  $obrazky = $product->getElementsByTagName( "images" ); 
  $images = $obrazky->item(0)->nodeValue;   

  
  $vyrobci = $product->getElementsByTagName( "manufacturer" );
  $vyrobce = $vyrobci->item(0)->nodeValue;
  
  $vlastnosti = $product->getElementsByTagName( "parameters" );
  $vlastnost = $vlastnosti->item(0)->nodeValue;
  

  
    if($stav = 0)
  {
   $dodacilhuta = 0;
  }
  else
  {
   $dodacilhuta = 5;
  }
  
  if($vyrobce = "Gabol, Španělsko")
  {
  $kratkypopis = "$popisshort Gabol";
  }
  else
  {
    $kratkypopis = "$popisshort";
  }
     foreach($vlastnosti as $nazevVlastnosti) { 
    $nazevVlastnosti1 = $nazevVlastnosti->item['name'];
} 

 echo "Název : <b>$nazev</b><br>Dodací lhůta je $dodacilhuta dnů<br>Krátký popis : $kratkypopis <br> Kód : $kod <br>Vlastnosti : $vlastnost - $nazevVlastnosti1<br>Popis : $popis\n<br>"; 
 
   }

 
  
  $winstorm = array(); 
  $winstorm [] = array( 
  'nazev' => $nazev, 
  'kod' => $kod, 
  'popis' => $popis,
  'kratkyPopis' => $kratkypopis,
  'dodaciLhuta' => $dodacilhuta,
  );  
  $doc = new DOMDocument(); 
  $doc->formatOutput = true; 
   
  $r = $doc->createElement( "winstorm" ); 
  $doc->appendChild( $r ); 

foreach( $winstorm as $cenik ) 
  { 
  $b = $doc->createElement( "cenik" ); 
  
  $nazev = $doc->createElement( "nazev" ); 
  $nazev->appendChild( 
  $doc->createTextNode( $cenik['nazev'] ) 
  ); 
  $b->appendChild( $nazev ); 
   
  $kod = $doc->createElement( "kod" ); 
  $kod->appendChild( 
  $doc->createTextNode( $cenik['kod'] ) 
  ); 
  $b->appendChild( $kod ); 
   
  $popis = $doc->createElement( "popis" ); 
  $popis->appendChild( 
  $doc->createTextNode( $cenik['popis'] ) 
  ); 
  $b->appendChild( $popis ); 
   
  $popisshort = $doc->createElement( "kratkyPopis" ); 
  $popisshort->appendChild( 
  $doc->createTextNode( $cenik['kratkyPopis'] ) 
  ); 
  $b->appendChild( $popisshort ); 
  
  $dodacilhuta = $doc->createElement( "dodaciLhuta" ); 
  $dodacilhuta->appendChild( 
  $doc->createTextNode( $cenik['dodaciLhuta'] ) 
  ); 
  $b->appendChild( $dodacilhuta ); 
  
  $r->appendChild( $b ); 
  } 
  echo $doc->saveXML(); 
  $doc->save("vystup.xml")  
  
  ?>
  }
 
 
</body>
juriad
Profil
71. řádek přesuň před 11. (před foreach)
72. - 78. přesuň před 67. (dovnitř foreach)

Problém byl v tom, že jsi do pole $winstorm přidal hodnotu až po doběhnutí prvního foreach; tedy jen jeden, poslední, produkt.
Jakub Man
Profil
juriad:
Děkuji mnohokrát :) Snažím se to vyřešit celé dopoledne a přitom je to taková drobnost :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: