Autor Zpráva
Sedlista26
Profil
Ahoj, nějak se mi nedaří rozchodit čtení XML souboru pomocí PHP.
Zde jsem projel už několik topiců. Kód jsem dal dohromady tak, že funguje na jiných XML souborech, ale na tomto to nějak nemůžu dát dohromady. Pravděpodobně to bude prkotina, plynoucí z trochu odlišné struktury XMLka(pletou se tam xsi:data a elementy, které ignoruju) proti těm, kde mi čtení funguje (prozatím tomu moc nehovím).

Prozatím mi stačí aby mi to vypsalo libovolný atribut z <destinace id="1">, abych jste mi ukázali cestu jak k tomu přistoupit. Se získanými daty už si poradím, ale momentálně mi to nevypisuje vůbec nic...

Přes if ($xml) to proleze, takže na XML stranu se to dostane, chyba je někde u foreach, ale opravdu nevim jak tam má vypadat syntaxe...


Díky

XML zde:
http://www.blue-style.cz/xml/destinace.xml

můj kód zde:
<?php 
$xml = simplexml_load_file("http://www.blue-style.cz/xml/destinace.xml");
$xml -> addAttribute('id', '1');
if ($xml)
{
    $data = array();
    foreach ($xml->destinace as $item) {
    
        $data[] = array($item->idZeme, $item->aplKod, $item->idZeme);
    }......etc.
Medvídek
Profil
Sedlista26:
Řekl bych, že bude problém s namespace (jmenný prostor).

$ns = $xml->getDocNamespaces();
$data = $xml->children($ns['xsi']);
atd.
Sedlista26
Profil
Medvídek:
J díky, zkusím to. Dostuduju, o co vůbec jde a pak hodim info jestli to pomohlo.
Sedlista26
Profil
Medvídek:
Tak jsem to zkoušel pošolíchat a pořád se nemůžu doklikat k destinacím, asi sem natvrdlej.
Vrazil jsem tam kus tvého kódu, který jak se později ukázalo bude zatím jediný plně funkční - tedy při printnutí $data dostanu "SimpleXMLElement Object ( [data] => SimpleXMLElement Object ( ) )". Což je předpokládám ok, do namespace "data" se chci skutečně dostat.

Avšak napíšu-li ještě jeden řádek, kterým bych se měl dostat už konečně k destinacím: "$destinace = $child -> destinace" , dostanu na výstup print_R prázdný SimpleXMl objekt.

Takže chytrému napověz, hloupého kopni, prosil bych kopanec, díky:-)

Poslední, minimalizovaný kód:
<?php 
$xml= simplexml_load_file("http://www.blue-style.cz/xml/destinace.xml");
$ns= $xml->getDocNamespaces();
$child = $xml -> children($ns['xsi']);
$destinace = $child -> destinace -> aplKod; 
print_r($destinace);
?>
Milkys
Profil
Čest, nevím jestli ti nějak pomohu, ale já používám zatím úspěšně tyto způsoby:

$xml = simplexml_load_file("soubor.xml");
$keys = $xml->xpath("hotel"); //hotel jsou jednotlivé položky
    foreach ($keys as $h) {
    $name = trim($h->name);
    $hotId = $h->hotId;
    $vybavení = $h->properties->property;//v případě, že xml je "hlubší" a má jen 1 hodnotu
    //tady může být podmínka, kontr. echo ap...
          foreach($h->properties->property as $p) { //v případě, že xml je "hlubší" a property obsahuje vícehodnot
          //echo $p->neco; // vypíše všechny hodnoty neco od daného hotelu resp. položky
          }  
    }
Dobrý sorted xpath nebo tak nějak tím si seřadíš vypsané hodnoty tak jak budeš potřebovat.

include_once ('SimpleDOM.php');
$xml = simpledom_load_file("soubor.xml");
$keys = $xml->sortedxpath("hotel",'rating/total', SORT_DESC);
//tady řadím hodnoty v total, total je hlounběji proto bylo nutné použít o 1 úroveň nadřízený rating
//dále postupuješ podobně jako výše

To co píšeš nahoře, vím, že existuje, ale neumím to použít proto jsem ti neporadil kokrétně. Zkus to třeba ti to pomůže. Názvy jsou tam samozřejmě vymyšlené a nesouvisí s tvým xml.

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: