PHP kézikönyv
Előző
Következő
Az XML (eXtensible Markup Language) olyan adatformátum, amit a Weben keresztüli adatcserére terveztek.
Ezt az ajánlást a World Wide Web Consortium (W3C) dolgozta ki és gondozza.
További információk az XML-ről és a kapcsolódó technológiákról a http: / /www.w3.org / XML / címen található.
Ez a kiterjesztés James Clark expat könyvtárát használja, amely a http: / /www.jclark.com / xml / címen beszerezhető.
Ez lehető teszi XML dokumentumok beolvasását, ún. elemzését, de nemazok érvényesítését.
Három különböző PHP által is támogatott forrás - karakterkódolást Három különböző PHP által is támogatott forrás - karakterkódolást támogat:
US-ASCII, ISO-8859-1 és UTF-8.
UTF-16 nincs támogatva.
Ez a kiterjesztés lehetőséget nyújt arra, hogy XML elemzőket hozzunk létre és azokhoz saját kezelőfüggvényeket rendeljünk hozzá, amelyek más és más események esetén futnak le.
Minden XML elemzőnek néhány paramétere beállítható, ami a működését befolyásolja.
Ez a kiterjesztés az expat könyvtárat használja, amely a http: / /www.jclark.com / xml / címen beszerezhető.
A Makefile, amely ezzel a csomaggal jön alapértelmezés szerint nem telepíti a nekünk szükséges eljáráskönyvtárat, ehhez a következő sorokat kell beleírni:
Az Apache 1.3.7 vagy későbbi verziójával már együtt jár az expat könyvtár.
Ekkor a PHP-t csak egyszerűen a --with-xml opcióval kell fordítani - minden kiegészítő elérési útvonal nélkül - és ekkor az Apacheüba épített expat könyvtárat használja majd.
Az UNIX rendszereken a configure parancsot kell a --with-xml kapcsolóval.
Az expat könyvtárnak olyan helyen kell installálva lennie, ahol a fordító el tudja érni.
Ha a PHP-t modulként Apache 1.3.9 (ennek vagy későbbi verziójú) alá installálod, akkor a PHP automatikusan az Apache beépített expat Ha a PHP-t modulként Apache 1.3.9 (ennek vagy későbbi verziójú) alá installálod, akkor a PHP automatikusan az Apache beépített expat eljáráskönyvtárat fogja használni.
Szükség lehet CPPFLAGS és a LDFLAGS környezeti változók beállítására a rendszeren, mielőtt elindítod a configure parancsot, ha az expat-ot valamilyen egzotikus helyre installálták.
A PHP telepítése....
Tada!
Ezt kell( ene) látnod!
Ez a kiterjesztés semmilyen konfigurációs beállításokat nem definiál.
Ez a kiterjesztés semmilyen erőforrás típust nem definiál.
Az itt listázott állandókat ez a kiterjesztés definiálja, és csak akkor elérhetőek, ha az adott kiterjesztés be van fordítva a PHP-be, vagy dinamikusan betöltött.
A definiálható XML eseménykezelők:
Táblázat 1.
A támogatott XML eseménykezelők:
PHP függvány ,amely regisztrálja a kezelőt
esemény leírása
Elem esemény akkor történik, amikor az XML elemző egy elem kezdő vagy zárócímkéjével találkozik.
A nyító és zárócímkékhez külön eseménykezelők rendelhetők.
(Elemzett) szöveges adatnak tekinthető durván minden, ami az XML dokumentumban nem a jelölésekhez tartozó tartalom, beleértve a jelölések közti térközöket is.
Az XML elemző nem ad és nem vesz el semmilyen térkökaraktert az elemzés során a dokumentumból, ez teljes mértékben a feldolgozó alkalmazás feladata, illetve annak eldöntése, hogy ezek a karakterek értékes információt jelentenek vagy sem.
PHP programozók számára ismerős lehet a feldolgozó utasítás (proccesing instructions:
PI) fogalma.
A ?php? maga is ilyen, ahol a php a feldolgozó utasítás "célpontja", magyarán a megcélzott feldolgozó.
Ezek mind az alkalmazásfüggő elemek, kivéve az XML jelölésűeket, amely lefoglalt ebben az esetben is.
Azok az adatok, amelyek semmilyen más kezelő nem kezel le, ehhez a függvényhez kerülnek, pl.:
XML és dokumentumtípus deklaráció.
Ezt a kezelőt hívja meg az elemző, ha jelölés deklarációs egyedet (unparsed, NDATA entity). kell feldolgozni.
Ez a kezelő felelős a jelölések deklarációjáért.
Ezt az kezelőt hívja meg az elemző, ha egy külső egyedhivatkozást talál.
Ez lehet állományra vagy URL-re történő hivatkozás.
Lásd a Példák külső egyedek kezelésére c. fejezetet!
Az elemek nevei kisbetűket és nagybetűket vegyesen tartalmazhatnak.
Az elemkezelő fügvények szempontjából ez nem mindegy, ezért az XML szabvány definiált egy betűkezelő szabályt, mely szerint "ha kisbetűt, nagybetűt vegyesen tartalmazó karaktersorozatot kell feldolgozni, akkor a karaktersorozatban a kisbetűket ki kell cserélni a nekik megfelelő nagybetűkre".
Más szavakkal, amikor egy karaktersorozat érkezik az XML értelmezőhöz, a betűkezelés egyszerűen a teljes nagybetűre váltást jelenti.
Alapértelmezés szerint az XML kezelők már nagybetűre váltott formában kapják meg a neveket az értelmezőtől.
Ez a viselkedés azonban lekérdezhető ill. megváltoztatható az XML elemző következő két függvényével: xml_parser_get_option() (lekérdezés) és a xml_parser_set_option() (beállítás) függvényekkel.
A következő hibaüzeneteket definálták (az xml_parse() függvény visszatérési értékei lehetnek):
A PHP XML kiterjesztése támogatja az Unicode karakterkészeletet különböző karakterkódolások által.
Kétféle karakterkódolás különböztetünk meg, az ún. forrás kódolást és a cél kódolást.
A PHP belső, értelmezési célokra a dokumentumokat mindig UTF-8 karakterkódolás szerint kódolja.
A forrás-kódolás az XML dokumentum értelmezése, elemzése A forrás-kódolás az XML dokumentum értelmezése, elemzése során használja.
Az XML értelmezőt létrehozásakor meg lehet határozni az elemző forrás kódolását, amit később már nem lehet megváltoztatni.
A támogatott karakterkészletek a forrás kódolás számára a következők:
ISO-8859-1, US-ASCII és az UTF-8.
Az első kettő egybájtos kódolás, ami annyit tesz, hogy minden karaktert egyetlen bájton ábrázolnak.
Az UTF-8 egy és négy bájt között különböző hosszúságú bitláncon (21 hosszúig) tudja ábrázolja a karaktereket.
A forrás kódolás alapértelmezett karakterkészlete a PHP-ben a ISO-8859-1.
A cél-kódolás akkor készül el, amikor a PHP átadja az adatokat az XML kezelő függvényeknek.
Amikor egy XML elemző létrejön, a cél-kódolás a forrás-kódolásához igazodik, de ezt meg lehet változtatni a későbbiek során.
A cél-kódolás hatással lesz a karakteres adatra, XML elemek címkéire és a feldolgozó utasításokban definiált célpontokra is!
Ha az XML elemző olyan karaktert talál, mely nincs definiálva a forrás-kódolás karakterkészletében, akkor ez hibát okoz.
Ha az értelmezett XML dokumentumban találkozik a PHP egy olyan karakterrel, amit nem nem tud megjeleníteni a cél-kódolás karakterkészlete, akkor a problémás karaktert "lefokozza".
Ez annyit jelent, hogy kérdőjelet rak a helyébe.
Példa 1.
?php $file = "data.xml"; $depth = array(); function startElement($parser, $name, $attrs) {global $depth; for ($i = 0; $i $depth[$parser]; $i++) {print" ";} print "$name\n"; $depth[$parser]++;} function endElement($parser, $name) {global $depth; $depth[$parser]--;} $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!($fp = fopen($file, "r"))) {die("could not open XML input");} while ($data = fread($fp, 4096)) {if (!xml_parse($xml_parser, $data, feof($fp))) {die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));}} xml_parser_free($xml_parser);
Példa 2.
Példa 3.
$file = "xmltest.xml"; function trustedFile($file) {/ / only trust local files owned by ourselves if (!eregi("^([a-z]+): / /", $file) fileowner($file) == getmyuid()) {return true;} return false;} function startElement($parser, $name, $attribs) {print" lt; font color=\"#0000cc\ "$name / font"; if (sizeof($attribs)) {while (list($k, $v) = each($attribs)) {print "font color=\"#009900\" $k / font =\ "font color=\"#990000\" $v / font \"";}} print "gt ;";} function endElement($parser, $name) {print" lt; / font color=\"#0000cc\ "$name / font gt ;";} function characterData($parser, $data) {print" b $data / b ";} function PIHandler($parser, $target, $data) {switch (strtolower($target)) {case "php": global $parser_file; / / If the parsed document is "trusted", we say it is safe / / to execute PHP code inside it.
Példa 4. xmltest.xml
?xml version=' 1.0'? !DOCTYPE chapter SYSTEM "/ just / a/test.dtd" [!ENTITY plainEntity "FOO entity "!ENTITY systemEntity SYSTEM "xmltest2.xml"] chapter title Title plainEntity; / title para informaltable tgroup cols="3 "tbody row entry a1 / entry entry morerows="1" b1 / entry entry c1 / entry / row row entry a2 / entry entry c2 / entry / row row entry a3 / entry entry b3 / entry entry c3 / entry / row / tbody / tgroup / informaltable / para systemEntity; section id="about "title About this Document / title para !- - this is a comment - - ?php print 'Hi!
Példa 5. xmltest2.xml
Előző
Tartalom
Következő
Fel