CompZone.Org :: Artykuły :: PHP
Pytania w drugiej edycji Testu PHP powinny być:
Trudniejsze
Łatwiejsze
Skomplikowane
Na myślenie
Do liczenia
Sonda Wyniki

Add to Google

Podstawy SimpleXML

W artykule tym opiszę jak można wykorzystać SimpleXML do pobierania danych XML. Należy dodać że jest to bardzo wygodny interfejs. Moduł SimpleXML jest domyślnie w kompilowany w PHP5, nie jest dostępny niestety dla użytkowników PHP4.

Na samym początku należy utworzyć obiekt SimpleXMLElement zawierający dane XML. Po załadowaniu danych, każda wartość w drzewie obiektów jest dostępna identycznie jak w przypadku tablic XML.

Tworzenie obiektu SimpleXMLElement z pliku

Przy tworzeniu obiektu SimpleXMLElement z pliku wykorzystujemy funkcję simplexml_load_file. Jako argument przekazujemy oczywiście ścieżkę do pliku.

Tworzenie obiektu SimpleXMLElement z ciągu

W tym wypadku korzystamy z funkcji simplexml_load_string. Jako argument przekazujemy nazwę stałej tekstowej lub zmiennej, w której znajduje się drzewo XML.

Plik XML

Na potrzeby tego artykułu przygotowałem następujące drzewo XML

 <?xml version="1.0"?>
<document>
<produkt>Komputer PC</produkt>
<comp>Skladak</comp>
<cena>~3500 PLN</cena>
<sklep>Sklep.pl</sklep>

<podzespoly>

<plyta_glowna>Asus A8N-E 939</plyta_glowna>
<procesor>AMD Athlon 64, 1800 MHz (9 x 200) 3000+</procesor>
<pamiec_fizyczna>Kingston K 2x 512 MB DualChanel</pamiec_fizyczna>
<grafika>NVIDIA GeForce 6600 (128 MB)</grafika>
<akcelerator>nVIDIA GeForce 6600 PCI-E</akcelerator>
<dzwiek>nVIDIA MCP04 - Audio Codec Interface</dzwiek>
<dysk>SAMSUNG SP1213N (120 GB, 7200 RPM, Ultra-ATA/133)</dysk>
<naped>_NEC DVD_RW ND-3540A</naped>

</podzespoly>

<opinie ile="4">

<opinia>Bardzo dobry komputer 1 !!!</opinia>
<opinia>Bardzo dobry komputer 2 !!!</opinia>
<opinia>Bardzo dobry komputer 3 !!!</opinia>
<opinia>Bardzo dobry komputer 4 !!!</opinia>

</opinie>
</document>

Teraz na przykładzie powyższego pliku pokażę jak odwoływać się do wartości elementów.

Przed tym powyższe drzewo zapisujemy do pliku np: drzewo.xml

 <?php
$xml = simplexml_load_file('drzewo.xml'); //tworzymy obiekt SimpleXMLElement

echo $xml -> produkt; //wyświetli: Komputer PC

echo $xml -> podzespoly -> plyta_glowna; //wyświetli: Asus A8N-E 939

echo $xml -> opinie -> opinia[1]; //wyświetli: Bardzo dobry komputer 2 !!!

echo $xml -> opinie['ile']; //wyświetli: 4
?>

Tak więc widzimy że dostęp do elementów drzewa XML jest bardzo prosty.

Odwołania do obiektu utworzonego z ciągu przy pomocy funkcji: simplexml_load_string wykonuje sie tak samo jednak ciąg należy zapisać w następujący sposób:

 <?php
$
xmlstr = <<<XML
<?
xml version="1.0"?>
<document>
<produkt>Komputer PC</produkt>
<comp>Skladak</comp>
<cena>~3500 PLN</cena>
<sklep>Sklep.pl</sklep>

<podzespoly>

<plyta_glowna>Asus A8N-E 939</plyta_glowna>
<procesor>AMD Athlon 64, 1800 MHz (9 x 200) 3000+</procesor>
<pamiec_fizyczna>Kingston K 2x 512 MB DualChanel</pamiec_fizyczna>
<grafika>NVIDIA GeForce 6600 (128 MB)</grafika>
<akcelerator>nVIDIA GeForce 6600 PCI-E</akcelerator>
<dzwiek>nVIDIA MCP04 - Audio Codec Interface</dzwiek>
<dysk>SAMSUNG SP1213N (120 GB, 7200 RPM, Ultra-ATA/133)</dysk>
<naped>_NEC DVD_RW ND-3540A</naped>

</podzespoly>

<opinie ile="4">

<opinia>Bardzo dobry komputer 1 !!!</opinia>
<opinia>Bardzo dobry komputer 2 !!!</opinia>
<opinia>Bardzo dobry komputer 3 !!!</opinia>
<opinia>Bardzo dobry komputer 4 !!!</opinia>

</opinie>
</document>
XML;
?>

Modyfikacja elementów

Można zadać pytanie co zrobić aby zmienić np. wartość 'ile' z 4 na 9, nic prostszego - odwołujemy sie do elementu tak jakbyśmy chcieli go wyświetlić i przypisujemy wartość tak jak do zwykłej zmiennej, kilka przykładów:

 <?php
$xml -> opinie['ile'] = 9;

$xml -> cena = '~3900 PLN';
?>

Generowanie dokumentów XML

Po co to robić? Wczytaliśmy drzewo XML, zmieniliśmy cenę, więc powinniśmy zapisać tą zmianę.

 <?php
$str = $xml -> asXML();
$q = fopen('drzewo.xml', 'w+');
fwrite($q, $str);
fclose($q);
?>

Niezrozumiała może być jedynie linijka pierwsza, która zwraca ciąg zawierający cały dokument XML zapisany w obiekcie SimpleXMLElement, który następnie jest przypisany do zmiennej $str.
Następnie wykonywane są operacje na pliku - zapisanie całego drzewa do pliku.

To by było na tyle jeśli coś jest nie zrozumiałe polecam zerknąć do zawsze pomocnego manuala.

jedre @ 09-07-2006 19:31
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!