Autor | Zpráva | ||
---|---|---|---|
Sedlista26 Profil |
#1 · Zasláno: 3. 3. 2012, 16:38:27
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']); |
||
Sedlista26 Profil |
#3 · Zasláno: 3. 3. 2012, 17:34:22
Medvídek:
J díky, zkusím to. Dostuduju, o co vůbec jde a pak hodim info jestli to pomohlo. |
||
Sedlista26 Profil |
#4 · Zasláno: 5. 3. 2012, 10:55:33
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 |
#5 · Zasláno: 5. 3. 2012, 16:49:28
Č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 } } 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. |
||
Časová prodleva: 11 let
|
0