Doporučujeme: Doména do 10 minut | Stahovač videí z YouTube | 60 GB FTP hosting | PHP hosting od 23 Kč | TV program | Zkracovač dlouhých adres | 60 GB FTP hosting
| Zavřít |
klikni pro zmenšení fotky

Můj blog – až 10 % špičkového kódu navíc!

Parsování XML? Zapomeňte na XSLT!

Datum: 11. 4. 2007 18.00 | Autor: Lukáš | 9188× | Kategorie: PHP | Komentáře: 12

Pokud chcete v PHP4 parsovat XML soubor, například RSS zdroj, musíte použít XSLT funkce (xslt_create, xslt_set_base, xslt_process), naučit se základy XSLT a s jejich pomocí si pak vytvořit soubor s XSLT šablonou, pomocí které pak z XML zdroje vytáhnete potřebná data.

Další možností je ještě použití XML funkcí, ty jsem však nezkoušel a s letmým pohledem na ukázkové kódy mi to opět připadá jako kanón na vrabce.

 

S příchodem PHP5 však přichází více možností, a jednou z nich je vynikající rozšíření SimpleXML (součást standardního balíku PHP), s jehož pomocí je parsování XML opravdu je pár řádků kódu.

Zápis ukážu na příkladu:

 1 <?php

 2
 3
/*  Zde načteme obsah XML souboru do proměnné; je možné použít i funkci simplexml_load_string, kterou lze načíst přímo XML data, která máme uložena v nějaké proměnné. V této chvíli se nám vytvoří objekt $xml, se kterým budeme dále pracovat. */
 4
$xml=simplexml_load_file("http://italo.cz/rss.php");
 5
 6
/* Teď je to opravdu primitivní. Jednoduchým příkazem $xml->NazevElementu vypíšeme potřebný obsah. Následující kód vypíše název kanálu, jeho popis a odkaz na web. */
 7
echo "<div id='ctecka'>
 8 <h1>
 9 <a href='"
.$xml->channel->link."' onclick='return!window.open(this.href);'>".$xml->channel->title." - ".$xml->channel->description."</a>
10 </h1>"
;
11
12
/* A protože je článků většinou v RSS zdroji víc, jednoduchým cyklem foreach získáme z $xml->channel->item veškerá data, a to opět ve formátu objektu. */
13
foreach ($xml->channel->item as $item){
14 echo 
"<div class='item'>
15 <h2>
16 <a href='"
.$item->link."' onclick='return!window.open(this.href);'>".$item->title."</a>
17 </h2>
18 "
.$item->description.$item->image."
19 </div>"
;
20 }
21
22 echo 
"</div>";
23
?>

A to je vše. Jediným omezením těchto funkcí je, že umí korektně pracovat pouze s daty v kódování utf-8, pro převod tedy případně použijte funkci iconv s modifikátorem //IGNORE (některé znaky v utf-8 totiž nemají svou obdobu ve windows-1250 — převod by pak skončil chybou).

Komentáře:

  1. krteczek2. 9. 2007 7.30

    S tím UTF-8 je to jasné, protože se předpokládá, že XML je v UTF-8.



    odpovědět
  2. Petr20. 11. 2007 1.11

    Zdravím, mám drobný dotaz. Jak pomocí iconv() převést zdroj rss ve win1250 na utf-8, tak aby pak prošel korektně simplexml_load_file() a zase se vypsal ve win1250. Něco jsem zkoušel, ale neúspěšně...

    Díky.



    odpovědět | Odpovědi: Lukáš [3],
  3. Lukáš20. 11. 2007 1.24

    Odpověď pro Petr [2]: No pak zase musíš všechno převést pomocí iconv zpátky do windows-1250.



    odpovědět
  4. Petr20. 11. 2007 20.43

    Zkoušel jsem toto, ale výsledek je prázdný

    $xml = iconv("CP1250//TRANSLIT", "UTF-8//IGNORE", "http://reality.iHNed.cz/?p=K00000_rss");
    $xml=simplexml_load_file($xml);
    $xml = iconv("UTF-8//IGNORE", "CP1250//TRANSLIT", $xml);



    odpovědět
  5. Lukáš21. 11. 2007 18.24

    Výstupem proměnné $xml po prvním řádku totiž bude řetězec obsahující „http://reality.iHNed.cz/?p=K00000_rss“.



    odpovědět | Odpovědi: Petr [6],
  6. Petr23. 11. 2007 0.12

    Odpověď pro Lukáš [5]: Tak jsem to zkoušel různě popřehazovat, ale výsledek žádný. Můžeš mi prosím poradit váíce? Nějakým příkladem? Díky.



    odpovědět | Odpovědi: Petr [7],
  7. Petr25. 11. 2007 1.44

    Odpověď pro Petr [6]: Už je to ok...



    odpovědět
  8. Radek19. 12. 2007 11.22

    Díky za pěkný článek!



    odpovědět
  9. esotery25. 1. 2008 9.59

    Nejdřív se nauč pořádně xhtml(html), to že ti text přetéká div při standartní velikosti písma o až o 800 px ti asi nevadí.



    odpovědět | Odpovědi: Lukáš [10],
  10. Lukáš25. 1. 2008 12.31

    Odpověď pro esotery [9]: Klídek. Nejen, že to nemá s html nic společného, ale ty by ses zase mohl naučit pořádně česky, když už někde rýpeš.



    odpovědět

Přidat nový komentář:




Ochrana proti spamu. Napište prosím číslici pět: