flickr galerie | Twitter @Padáček | Facebook profil | Foursquare profil | LinkedIn profil

Zápisky.info


SimpleXML – čtěte XML data v PHP jednoduše

Aplikace RailLog je mým věčným zdrojem inspirace pro další studium nových rysů PHP5. Po přečtení jedné knihy o refaktoringu (o té někdy příště) a opětovném prohlédnutí kódu mi silně začalo vadit, že všechna data mám „natvrdo“ deklarovaná v _model.php a rozhodl se je uložit do nějaké formátu, který je jednodušší pro editaci uživatelem ... zvolil jsem XML.

Formát XML jsem zvolil ze dvou důvodů. a) chtěl jsem si konečně vyzkoušet napsat vlastní DTD a b) chtěl se naučit pracovat s novým PHP modulem SimpleXML. Celé mi to připomíná řešení, které jsem použil, když jsem zkoušel napsat jednoduchý „tree view“ pro Eclipse zobrazující určitý XML soubor. Utilita načte XML ze souboru (simplexml_load_file( string $filename )) nebo z in–line řetězce (simplexml_load_string( string $xmlsource )) a vytvoří jednoudchou strukturu z objektů a polí, kterou lze jednoduše procházet pomocí kostrukce foreach.

Uvažujme následující XML strukturu (z navrhovaného XML formátu aplikace RailLog):

<?xml version="1.0" encoding="UTF-8"?>
<raillog>
  <stations>
    <station id="ceska-trebova" name="Česká Třebová"/>
    <station id="hranice-na-morave" name="Hranice na Moravě"/>
    <station id="olomouc-hln" name="Olomouc hl.n."/>
    <station id="praha-hln" name="Praha hl.n."/>
    <station id="svitavy" name="Svitavy"/>
  </stations>
</raillog>

Pro načtení této struktury a vytvoření objektů Station stačí pár řádek kódu:

<?php

  $stations = array();

  $data = simplexml_load_file('raillog.xml');

  foreach ($data->stations[0]->station as $station) {
    $stations[] = new Station(
      (string)$station['id'], (string)$station['name']
    );
  }

?>

Zde vidíte, že jednotlivé objekty mají jako své vlastnosti názvy vnořených elementů, které obsahují pole se svými vnořenými elementy, atd. každý element zárověn obsahuje asociativní pole s obsahem svých atributů, kde jejich indexem je název elementu. Samozřejmě, pokud 100% znáte strukturu cílového souboru a chcete vypsat, dejme tomu, název prvního nádraží, můžete k vlastnostem přistupovat přímo:

  echo((string)$xml->stations->station[0]->name);

Umíte–li XPath, není nic jednoduššího, než prohledávat XML strom pomocí něj. Takto lze vypsat všechny vlaky ze souboru (v naše XML se element jmenuje train):

foreach ($xml->xpath('//train') as $train) {
  echo((string)$train['name']);
}

Stejný způsobem lze k vlastnostem přistupovat a měnit jejich obsah. Následně můžete upravenou XML strukturu zpětně získat v XML syntaxi – $xml->asXml().

A to je vše. Pokud hledáte nějaké detaily o tomto modulu, doporučuju dokumentaci PHP.

Vloženo 27.08. 2005 v 12:11 | PHP | Zobrazeno 9986x

Komentáře:

  1. [1] od: honza

    Diky autore, ani nevis jak moc jsi mi timhle clankem pomohl. Porad mi kod nefungoval, vymyslel jsem kdeco, ale reseni tady popsany vyresilo muj problem. Jeste jednou dik za Tvoji praci.

    odpověz na tento komentář 18.02. 2009, 22:33

Nový komentář:

V komentáře lze použít následující „tagy“:

  • [a href=http://url.com]titulek odkazu[/a] – bude převeden na odkaz
  • [abbr title=text]abbr[/abbr] – bude převeden na <abbr>.
  • [cite], [code], [em], [strong], [q], [li] — obdobně.

Komentáře musí být před publikováním schváleny. Děkuji!

Kontrola proti SPAMu

Vlož znaky zobrazené na obrázku:


Navigace

Vyhledávání

 Vyhledávání 

Povolené operátory: AND, OR a NOT

Kategorie

Nejčtenější

Poslední komentáře

  • Jirka Hradil: Ten překlad je dobrá práce, jednoduché, srozumitelné :)....
  • honza: Diky autore, ani nevis jak moc jsi mi timhle clankem pomohl. Porad mi kod nefungoval, vymyslel jsem kdeco, ale reseni...
  • Milan: [2] Místo řádku: class SampleConfigKeyNotDefinedException extends Exception má zřejmě být řádek class SampleTemplatedNotFoundException extends Exception...
  • Josef Petrák: [1] Máš data v databázi, třeba Oracle, a chceš z nich udělat nějaký report a ten nabídnout v různých formátech...
  • havlikp: proč nepoužít excel? ;-)...

Odkazy

Statistiky návštěvnosti [TOPlist]
PageRank Checking Icon
Valid XHTML 1.0 Strict

Obsah © 2004 – 2006 Josef Petrák

Grafika © 2004 Dlouhý Webdesign

Redakční systém BLOG:CMS