Autor Zpráva
Pavlas
Profil *
Dobrý den,

mám xml soubor s touto strukturou:

<?xml version="1.0" encoding="utf-8"?>
<items>
<item objc="00400-3/8-12A" nazev="vršek mosazný - Myjava 3/8&quot; čtyřhran  T 12A (matička)" cena_vcetne_dph="44.77" obrazek="http://www.sagittarius.cz/img/_/p.00400-38-12a/00400-38-t12.jpg" />
<item objc="00400-3/8-24A" nazev="vršek mosazný 8/24 - 3/8&quot; DLOUHÝ (čep)" cena_vcetne_dph="68.97" obrazek="http://www.sagittarius.cz/img/_/p.00400-38-24a/00400-38-24a.jpg" />
<item objc="00400-3/8-24B" nazev="vršek mosazný 8/24 - 3/8&quot; KRÁTKÝ  (matička)" cena_vcetne_dph="96.8" obrazek="http://www.sagittarius.cz/img/_/p.00400-38-24b/00400-38-24b.jpg" />
<item objc="00400360" nazev="slikonový kroužek k DRM 3113" cena_vcetne_dph="24.2" obrazek="" />
<item objc="00400531" nazev="gumový kroužek k DRM 3113" cena_vcetne_dph="12.1" obrazek="" />
</items>
Takto se snažím vypsat v Php:
$xml=simplexml_load_file("cenik.xml") or die("Error: Cannot create object");
foreach($xml->item[0]->attributes() as $a => $b) { 
echo $a,'=',$b,"<br>"; 
} 

Toto mi vypíše pouze první řádek. Jak nejlépe udělat cyklus aby mi to vypsalo všechny řádky?
Druhá otázka je zda to pak z tohoto výpisu mohu rovnou ukládat do DB Mysql?

Děkuji
Pavlas
Profil *
$xml=simplexml_load_file("cenik.xml") or die("Error: Cannot create object");
for ($i=0; $i<10000; $i++) {
foreach($xml->item[$i]->attributes() as $a => $b) {
echo $a,'=',$b,"<br>";
}
}

toto sice vypíše vše ale asi to není úplně dobré, když neznám kolik je řádku...
Kajman
Profil
Zkuste
foreach($xml as $item) {
  foreach($item->attributes() as $a => $b) { 
    echo $a,'=',$b,"<br>"; 
  } 
}
Pavlas
Profil *
Děkuji toto funguje. Teď jsem si chtěl vypsat například pouze attribut nazev ale nic mi to nevypíše (prázdná stránka bez chyby): Potřeboval bych vypsat všechny attributy do samostatné proměnné a tu pak vkládat do DB. Děkuji
$xml=simplexml_load_file("cenik.xml") or die("Error: Cannot create object");
  foreach ($xml as $item)
  {
    foreach ($item->attributes()->nazev as $nazev)
      {
    echo $nazev . "<br>";
      }
  }
Tomášeek
Profil
Pavlas:
Začni u základů jazyka, jak foreach pracuje, co mu předat máš a co mu předáváš. Takhle to fakt nefunguje.

foreach($item->attributes() as $item) { 
    echo $item->nazev; 
}
Pavlas
Profil *
Děkuji. Foreach jsem studoval foreach (array as $value){} - nicméně mi to stejně není jasné. Viz tvůj kód: Pole $item s atributy jeho klíč je použit $item z prvního foreach, následně chci vypsat jenom název (nevypíše nic), když dám jenom echo $item; vypíše vše.
Kajman
Profil
Pokud chcete vypsat jen konkrétní atribut, tak nedělejte foreach na všechny atributy, ale vypište si jen ten chtěný...

foreach($xml as $item) {
  echo $item['nazev'],"<br>";
}

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: