Autor Zpráva
jamal
Profil *
Dobry, mam xml soubor se seznamem produktu a jejich parametru a potřebuju aby když při projíždení souboru narazím na
<produkt id="42">
<nazev>Zeměkoule</nazev>
</produkt>

aby mi to id a nazev ulozilo do promenne treba $id a $nazev ktere potom vlozim do databaze

Diky za pomoc
Majkl578
Profil
na praci s xml slouzi trida simplexml
jamal
Profil *
dik za radu ale neslo by to pres parsovani atd.?
Mike8748
Profil
jamal
parsovani je velice obecny termin, tak upresni co tim myslis. pripadne i ukazku stavajiciho kodu
jamal
Profil *
je mi celkem jedno jak to bude bude fungovat ale hlavne at to jede.

zkoušel jsem tenhle script a celkem jede akorat potrebuju vytahnout ty atributy id a obsah tagu <nazev>

<?php

$nas_soubor=seznam.xml";



function PocatecniZnacka ($parser, $nazev, $atributy)
{
echo "Narazil jsem při čtení na značku $nazev s atributy:"."<BR>";
echo print_r($atributy)."<BR>";
}

function KoncovaZnacka ($parser, $nazev) {

$nas_parser=xml_parser_create();

xml_set_element_handler ($nas_parser, "PocatecniZnacka", "KoncovaZnacka");


if (!($obsahsouboru = fopen($nas_soubor, "r")))
die("Nemohu otevřít XML pro čtení.");

while ($data = fread($obsahsouboru, 5))
xml_parse($nas_parser, $data, feof($obsahsouboru));

xml_parser_free($nas_parser);
?>
skybedy
Profil
Například takhle:

<?php

$xml = simplexml_load_file('example.xml');
foreach($xml->produkt as $produkt){
echo $produkt['id'];
echo $produkt->nazev;
}

?>

Předpokládá to ještě existenci kořenového elementu nad <produkt></produkt>.
jamal
Profil *
díky za pomoc,jestli bych vás ještě mohl poprosit jestli to nejde bez simple xml,protože to musím rozběhnout v php4 a tam mi to háže, chybu že se volá nedefinovana funkce
dik
skybedy
Profil
No tak samozřejmě, funkce SimpleXML přibyly až v pětce. Já ale klasické parsery nepoužívám, takže jedině něco nagooglit.
Majkl578
Profil
$text = <<< EEE
<produkt id="42">
<nazev>Zeměkoule</nazev>
</produkt>
<produkt id="5">
<nazev>blbost</nazev>
</produkt>
<produkt id="37">
<nazev>ptakovina</nazev>
</produkt>
EEE;

preg_match_all('#<produkt id="([0-9]+)">\n<nazev>(.+)<\/nazev>\n</produkt>#i', $text, $matches, PREG_SET_ORDER);
print_r($matches);

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: