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 9959x

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

  • 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...
  • Jan-Sebastian Fabík: Zdravím, nevím, co dělám špatně, ale když jsem použil tyto skripty, hlásí mi to chybu:Fatal error: Cannot redeclare class SampleConfigKeyNotDefinedException in...
  • Max: proc ne pouzit nazev Controller (podle MVC) ale Application?nechat abstraktni tridyController Model Viewbyl by mensi zmatek pro zacatecniky, jinak pekny vzorek...
  • Ola: Napis jim na podporu znova vyser se na banan .. Jinak ocenuju ze pouzivas BLOG:CMS, kazdej debilek na nej...

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