<?php
$plik = fopen('aktualności.xml•, "r");
$dane - fread(Splik, filesize{'aktualności.xml')); fclose($plik);
$xml_j>arser = xml_parser_create() } xnil_parse__into_struct.( $xral jparser, xiql j?arser_f ree (jparser); €1
€
$dane,
$vals, $ihdęx);
echo '<pre>'; print_r{$vals);
echó ' </pi*e>'; ?>
2 Na początku, za pomocą poleceń ^|, przepisujemy całą zawartość pliku aktualności.xml do zmiennej $dane.
3 Za pomocą funkcji xml_parser_create()
40 inicjujemy tak zwany parser XML, czyli silnik przetwarzający dokumenty XML. Po wywołaniu tej funkcji zostaje zwrócony uchwyt, który zapisujemy w zmiennej $xml_parser.
4 W linii 4Ś1 wywołujemy funkcję xml_parse_into_struct(). Funkcja ta powoduje przetworzenie przez parser o uchwycie przekazanym w pierwszym argumencie danych zapisanych w argumencie drugim i stworzenie na ich podstawie tablicy, która zapamiętana zostanie w zmiennej przekazanej w trzecim argumencie. Jeśli do funkcji podamy czwarty argument, zapamiętana w nim zostanie tablica ze spisem indeksów.
5 Za pomocą funkcji xml_parser_free() Cl zwalniamy pamięć zajmowaną przez parser.
6 Aby dowiedzieć się, w jaki sposób zawartość dokumentu XML została zapisa-
1
Do parsera XM1 można przekazywać dodatkowe parametry. Dokonuje się tego za pomocą funkcji xml_parser_set_option() Na j"przykład" dodanie tt# do skryptu pokaz_aktualnosci2.php tuz po i utworzeniu parsera ^1 spowoduje pomijanie przez niego białych i znaków i nieuwzględnianie ich w generowanej tablicy. Ekspert zachę-j ca do eksperymentów z innymi opcjami, których działanie wyjaśnione j zostało na stronie ©.
xml_par8er__set_option ($xxol jpar Bor,
► XML OPTION_SKIPJttiITE,l);
foreach ($vals as $wartosc){ if ($wartosc["tag"J-="TYTUŁ")
echo "<s,trong>". $wartosc( " value" ]. w</strćłng><br />"; if ($wartosc["tag" ]=“"TRESĆ")
echo $wartosc["value^]."<br /><br />";
- igpbkaż_airt'ualnoścl2.php
Zastępstwo dla krzemu
Naukowcy z Instytutu MTT poinformowali o rozpoczęciu prac nad opracowaniem nowej technologii produkcji układów elektronicznych.
Vista tworzy miejsca pracy
Według zapewnień Microsoftu, jednym ze
skutków wprowadzenia Visty. będzie i
na do tablicy $vals, wyświetlamy jej zawartość, posługując się funkcją print_r()
7 Po skopiowaniu plików aktualności.xml i pokaz_aktualnosdl.php na serwer WWW z obsługą PHP i uruchomieniu w prze-: glądarce tego drugiego zobaczymy widok Przekonamy się więc, że za pomocą trzech funkcji obsługujących XML udało nam się w zmiennej $vals zapisać w uporządkowany sposób całą zawartość dokumentu XML. ay
(0] «> Array (
[tag] => AKTUALNOŚCI ttypej “> open [level] => I
)
[1] => Array <
[tag] => WIADOMOŚĆ [type] => open [level] -> 2 [attributes] => Array (
[WAŻNA] *> tak
)
[2] “> Array
<
[tag] •> TYTUŁ [type] => complete [level] => 3
[value] => Zastępstwo dla krzemu
Zamieniając zapis € na przykład na kod •, spowodujemy, że na stronie w przejrzysty sposób zostaną wyświetlone tytuły i treści aktualności z pliku aktualnosd.xml
Łatwiejsze przetwarzanie XML-a
Wiemy już, jak pobrać z dokumentu XML wszystkie dane i zapisać je w zmiennej tablicowej, Warto poznać również inny, w wielu wypadkach znacznie bardziej wydajny sposób wydobywania danych z dokumentu XML. Polega on na stworzeniu trzech specjalnych funkcji PHP i naka-
I <?pb_p_____________________ ___________
lxfunc”tTon"źnVcTznIk2sVart ($x^Jparier, $attr, $pararas)( j if ($attr=="WIADOMOŚĆ")<
\ if ($params["WAŻNA"tak")
echo r<span style**color:red; font-weight:bold; ;
oloe
jjTrSci echo '<span style='Tco.lor:black; font-weight:bold; >
olse if ($attr=“;‘ZRODLO") echo 'Źródło: <etn>'; eloe if ($attr=>= "TRESC") echo '</3pan><br />';
} _
function 2nacŻnik_end($xmljparser, $attr){
if ($attr«»"ZRODLO") echo '</em><br 7><br />'; else if ($attr=a"TRESC') echo '<br />';
function znacznilc_text($xjaljparser/ $text){ echo $text;
>
7.nac2nik_8tart ', znaćznikłend')-«*£.--xp»l_setjcharacter_dota_handler {$xmljparser, 'znac2nifc_text');
$plik = fopen('aktualności.xml', "r"); €1
while($dane = fread($plik, 4096)ji
xmljparse($xialjparser, $dane, feof ($plik)) ?
>
£closó($plik);
pola2_aktLialnośd3.php
r
$xmljparser •«* xml_parser_create {); -< xml_set_element_handler($xml_parser,
xml_par8er-f r.ee ($xraljparser) ?>
zaniu parserowi wywoływanie ich automatycznie w chwili napotkania w dokumencie XML każdego znacznika otwierającego, każdego znacznika zamykającego oraz znajdującego się między tymi znacznikami tekstu. Ekspert pokaże, jak wykorzystać tę metodę operowania na dokumencie XML.
1 Podobnie, jak w wypadku poprzedniego skryptu, inicjujemy parser XML_*. Następnie wywołujemy funkcję xml_set_element_handler(). Wymaga ona trzech argumentów: pierwszy określa uchwyt do parsera, a dwa kolejne to nazwy funkcji, które zostaną wywołane w przypadku napotkania dowolnego znacznika: otwierającego oraz zamykającego.
2 Wywołujemy teraz funkcję
xml_set_character_data_handler(),
! do której przekazujemy dwa argumen-| ty. Pierwszym jest uchwyt do parsera,
| a drugim nazwa funkcji, która zostanie wywoływana w przypadku napotkania i zwykłego tekstu znajdującego się po-; między znacznikiem otwierającym i za-i mykającym.
3 Następnie otwieramy dokument XML «Śi w pętli pobierającej z niego kolejne wiersze wywołujemy funkcję xml_parse() Uruchamia ona przetwarzanie przez parser określony pierw-
szym argumentem danych zawartych w drugim argumencie. Ostatni z argumentów okre-i śla, czy do parsera przekazano już wszystkie informacje, czy też będą jeszcze kolejne.
4 Na koniec wystarczy już tylko zdefiniować funkcje znacznik_start() znacznik_end() m i znacznik_text() m
procedurach •).
| Muszą mieć one przedstawione przez Eksper-j ta nagłówki z listą argumentów. W pierwsz i funkcji możemy korzystać z nazwy znacznika i (zapisanej w zmiennej $attr), przy napotka-| niu którego funkcja została wywołana, oraz ! tablicy z atrybutami tego znacznika (zapisa-; nej w zmiennej $params). W drugiej może-| my korzystać wyłącznie z nazwy zamykanego i znacznika (zmienna $attr), a w trzeciej tylko i ze znajdującego się między znacznikami tek-I stu (zmienna $text). Ekspert zachęca do sa-j modzielnej analizy kodu PHP tych funkcji.
5 Po uruchomieniu skryptu w przeglądarce dane z dokumentu XML zostaną wy-: świetlone w atrakcyjnej postaci •.
Zastępstwo dla krzemu "
Naukowcy z Instytutu MTT poinformowali o rozpoczęciu prac nad opracowaniem nowej technologii produkcji układów elektronicznych. Źródło: 4press.pl
Vistn twoizy miejsca pracy Według zapewnień Microsoftu, jednym ze skutków wprowadzenia Visty, będzie stworzenie 100 tys. nowych miejsc pracy Źródło: 4press.pl
eKspert
68 LUTY 2007