Článek v rubrikách:

»PHP
»XML

Jak zpracovávat XML dokument, SimpleXML, ale neumí kódování WINDOWS-1250

Zpracovávat XML dokument, procházet, číst a ukládat je dnes nutnost, bez toho se žádný programátor neobejde. Tento článek např. řeší použití knihovny SimpleXML a čtení RSS zdroje.


Pro čtení XML dokumentů často používám php rozšíření SimpleXML, je snadné na používání a v XML dokumentu se lze pohybovat podobně jako v poli hodnot.

Následuje příklad jak číst RSS zdroj. V případě, že chceme změnit výstupní kódování můžeme použít funkci iconv. Vstupní kódování je vždy UTF-8, protože SimpleXML vždy interně pracuje s kódováním UTF. Výstupní kódování je windows-1250, ale můžeme zvolit libovolně podle sebe v proměnné $oC.

  1. $iC = "UTF-8";
  2. $oC = "CP1250";
  3. $url = "http://www.webfaq.cz/rss-clanky.php";
  4.  
  5. if (@$xml = simplexml_load_file($url)) {
  6. foreach ($xml->channel->item as $item) {
  7. $odkaz = iconv($iC, $oC, $item->link);
  8. $nazev = iconv($iC, $oC, $item->title);
  9. $popis = iconv($iC, $oC, $item->description);
  10. echo '<a href="'.$odkaz.'">'.$nazev.'</a>'."<br/>";
  11. echo $popis."<br/>";
  12. }
  13. }

SimpleXML má však i jednu nevýhodu, neumí pracovat s XML dokumenty se vstupním kódováním WINDOWS-1250. V takovém případě je lepší použít funkce DOM.

UPDATE: Při psaní tohoto článku jsem si ověřil platnost výroku, že SimpleXML neumí WINDOWS-1250. Výrok musím vzít zpět! Dle mých testů umí! Přesto, že jsem kdysi s tím měl problémy, opravdu to umí.

Zkusil jsem jednoduchý test, vytvořil jsem soubor napsáný ve windows-1250 kódování a do hlavičky vložil encoding windows-1250.

  1. <?xml version="1.0" encoding="windows-1250"?>
  2. <SHOP><SHOPITEM><PRODUCT>ěščřžýžřě+ěščřžýžřčšě+ěščřžýáíéíáýžřčšě+ ahoj lidi +ěščřžýáííáýžřčšě</PRODUCT></SHOPITEM></SHOP>

Pak jsem vytvořil testovací soubor, který XML dokument čte a vypisuje na obrazovku.

  1. <? $xml=simplexml_load_file($file); ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Untitled Document</title>
  7. </head>
  8. <body>
  9. <? foreach($xml as $k=>$v) echo $v->PRODUCT."<br/>"; ?>
  10. </body>
  11. </html>

Výsledek? Vypsáno na obrazovku:

  1. ěščřžýžřě+ěščřžýžřčšě+ěščřžýáíéíáýžřčšě+ ahoj lidi +ěščřžýáííáýžřčšě

podobné články

01.12.2008Cron a kdo vlastně spouští skript? Démon v pozadí nebo uživatel v prohlížeči?(17%)
27.06.2008XML-RPC přes CURL, aneb jak odeslat XML soubor vzdálené službě, když nemáme allow_url_fopen(17%)
19.06.2008XML a značkovací jazyky, historie a vznik(17%)
07.06.2008Jak zjistit S-Rank pomocí XML-RPC(17%)