Článek v rubrikách:
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.
- $iC = "UTF-8";
- $oC = "CP1250";
- $url = "http://www.webfaq.cz/rss-clanky.php";
- if (@$xml = simplexml_load_file($url)) {
- foreach ($xml->channel->item as $item) {
- $odkaz = iconv($iC, $oC, $item->link);
- $nazev = iconv($iC, $oC, $item->title);
- $popis = iconv($iC, $oC, $item->description);
- echo '<a href="'.$odkaz.'">'.$nazev.'</a>'."<br/>";
- echo $popis."<br/>";
- }
- }
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.
- <?xml version="1.0" encoding="windows-1250"?>
- <SHOP><SHOPITEM><PRODUCT>ěščřžýžřě+ěščřžýžřčšě+ěščřžýáíéíáýžřčšě+ ahoj lidi +ěščřžýáííáýžřčšě</PRODUCT></SHOPITEM></SHOP>
Pak jsem vytvořil testovací soubor, který XML dokument čte a vypisuje na obrazovku.
- <? $xml=simplexml_load_file($file); ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Untitled Document</title>
- </head>
- <body>
- <? foreach($xml as $k=>$v) echo $v->PRODUCT."<br/>"; ?>
- </body>
- </html>
Výsledek? Vypsáno na obrazovku:
- ěščřžýžřě+ěščřžýžřčšě+ěščřžýáíéíáýžřčšě+ ahoj lidi +ěščřžýáííáýžřčšě
podobné články
| 01.12.2008 | Cron a kdo vlastně spouští skript? Démon v pozadí nebo uživatel v prohlížeči? | (17%) |
| 27.06.2008 | XML-RPC přes CURL, aneb jak odeslat XML soubor vzdálené službě, když nemáme allow_url_fopen | (17%) |
| 19.06.2008 | XML a značkovací jazyky, historie a vznik | (17%) |
| 07.06.2008 | Jak zjistit S-Rank pomocí XML-RPC | (17%) |
komentáře
RSS Komentáře
Bohužel neznám podrobně quick.cart a jestli má nějaké možnosti importu a definice struktury cizích xml, ale pravděpodobně budete potřebovat vytvořit skript, který bude procházet daný xml soubor a získaná data bude vkládat do databáze. Třeba se tady někdo najde, kdo by měl chvíli času, v opačném případě doporučuji zadat zakázku na http://diskuse.jakpsatweb.cz
Dobrý den, již několik dní se trápím s tím jak načíst XMl soubor abych měl správné kódování. Používám komponentu NativeXML pro Delphi, ale obecně se v XML teprve orientuji a v kódování se nemůžu vyznat.
Soubor, který načítám nemá označené kódování, tedy v XMl deklaraci je: <?xml version=„1.0“ standalone=„yes“?>
Hodnoty entit potom jsou například: <FIELD>([{0|AB}])</FIELD> <FIELD>Koncová mìrka</FIELD> nebo <FIELD QMLINK=„sNOMSIZE“ UnitList=„UNIT_LENGTH_MM|mm|0.0000|||UNIT_LENGTH_INCH|inch|0.000000||“ Label=„sNOMSIZE“/>
Pokud XML načtu do XML editoru (XML Viewer, WMHelp ..) dokáží kódy „{“ dekódovat, i když třeba špatně identifikují kódovou stránku:
<FIELD>Koncová mìrka</FIELD> (místo „Koncová měrka“)
Problém mám s načítáním v programu pomocí NativeXML, kde se mi kódy „{“ nedekódují a protože kódování nerozumím, nevím si rady.
Můžete mi poradit, co je toto za kódování, případně jak s ním pracovat? Pokud má někdo zkušenost s NAtiveXMl (www.simdesign.nl) bylo by to ideální.
Děkuji.
Měním formát popisovaných znaků, protože jinak se při vložení příspěvku dekodují (vloženy MEZERY):
Dobrý den, již několik dní se trápím s tím jak načíst XMl soubor abych měl správné kódování. Používám komponentu NativeXML pro Delphi, ale obecně se v XML teprve orientuji a v kódování se nemůžu vyznat.
Soubor, který načítám nemá označené kódování, tedy v XMl deklaraci je: <?xml version=„1.0“ standalone=„yes“?>
Hodnoty entit potom jsou například: <FIELD>([ & # 1 2 3 ;0& # 1 2 4;AB& # 1 2 5 ;])</FIELD> <FIELD>Koncov& # 2 2 5 ; m& # 2 3 6 ;rka</FIELD> nebo <FIELD QMLINK=„sNOMSIZE“ UnitList=„UNIT_LENGTH_MM& # 1 2 4 ;mm& # 1 2 4 ;0.0000&# 1 2 4;& # 1 2 4;& # 1 2 4;UNIT_LENGTH_INCH& # 1 2 4;inch& # 1 2 4;0.000000|& # 1 2 4;“ Label=„sNOMSIZE“/>
Pokud XML načtu do XML editoru (XML Viewer, WMHelp ..) dokáží kódy „& # 1 2 3 ;“ dekódovat, i když třeba špatně identifikují kódovou stránku:
<FIELD>Koncová m& # 2 3 6 ;rka</FIELD> (místo „Koncová měrka“)
Problém mám s načítáním v programu pomocí NativeXML, kde se mi kódy „& # 1 2 3 ;“ nedekódují a protože kódování nerozumím, nevím si rady.
Můžete mi poradit, co je toto za kódování, případně jak s ním pracovat? Pokud má někdo zkušenost s NAtiveXMl (www.simdesign.nl) bylo by to ideální.
Děkuji.



Dobrý den,zajímavý web.Jsem totální amatér,mám eshop,založený na Quick.cartu.Mám i dodavatele zboží.Poslal mi odkaz,adresu,na xml soubor.Ten i stáhnu do pc,ale teď vůbec nevím,jak ty data nacpat do eshopu.Můžete mi někdo poradit?Díky email:keramj@seznam.cz