2006 06 XML FastCreate [XML]

background image

www.phpsolmag.org

38

Projekty

PHP Solutions Nr 6/2006

XML_FastCreate

www.phpsolmag.org

39

Projekty

PHP Solutions Nr 6/2006

F

ormat XML (eXtensible Markup
Language
) jest coraz częściej uży-
wany na stronach internetowych,

gdzie zawitał przede wszystkim jako
XHTML – nowy, promowany przez W3C
standard zapisu stron WWW. Innym po-
pularnym zastosowaniem XML-a są for-
maty plików pakietów biurowych, w szcze-
gólności stosowane od dawna w OpenOf-
fice.org formaty SXW czy SXC oraz nowa-
torskie i uznane za standard przez wiele
firm instytucji ODT (tekst) czy ODG (grafi-
ka). XML jest również wykorzystywany ja-
ko format eksportu i importu danych wielu
programów czy też komunikacji pomiędzy
aplikacjami znajdującymi się na różnych
maszynach (klient-serwer), np. w pro-
tokołach typu SOAP czy XML-RPC. Ję-
zyk PHP dysponuje dużymi możliwościa-
mi tworzenia i przetwarzania dokumentów
XML. W artykule pokażemy, jak użycie
PEAR-owego pakietu XML_FastCreate
(XFC) poszerza tę funkcjonalność, pozwa-
lając m.in. na wymuszanie zgodności ge-

Technologia XML podbija świat, a PHP opiera

swój sukces na wsparciu dla czołowych

rozwiązań. Zastosowanie XML_FastCreate

pozwala poszerzyć i tak bardzo zaawansowane

możliwości PHP w dziedzinie tworzenia

i manipulacji dokumentami XML...

nerowanego kodu XML z zasadami okre-
ślonymi przez DTD, informowanie użyt-
kownika o niezgodności, szybką konwer-
sję na XHTML oraz bardzo łatwe tworze-
nie rozbudowanych dokumentów, również
jeśli chcemy je składać z wielu części.

Instalacja

Jak już powiedzieliśmy, XFC jest pakietem
należącym do repozytorium PEAR (PHP
Extension and Application Repository
,

XML_FastCreate

Guillaume Lecanu

W SIECI

l

http://pear.php.net/

packages/XML_FastCreate

– klasa XML_FastCreate

l

http://xmlsoft.org – strona

główna projektu libxml

l

http://pear.php.net/

packages/Cache_Lite

– pakiet PEAR::Cache_Lite

l

http://lya.fr/pear/XML_

FastCreate/tests/ – przykła-

dy użycia XML_FastCreate

Stopień trudności: ll

l

Co należy wiedzieć...

Potrzebna będzie podstawowa znajo-

mość zagadnień programowania obiekto-

wego w PHP5. Przydatna będzie również

ogólna wiedza na temat standardu XML.

Co obiecujemy...

Pokażemy, jak za pomocą XML_Fast-

Create utworzyć prawidłowy kod XML.

Zademonstrujemy też, jak dokonywać

transformacji znaczników XML-a, wy-

muszać sprawdzanie DTD, wykrywać

błędy składni czy tworzyć dokumenty

w XHTML-u.

background image

www.phpsolmag.org

38

Projekty

PHP Solutions Nr 6/2006

XML_FastCreate

www.phpsolmag.org

39

Projekty

PHP Solutions Nr 6/2006

http://pear.php.net). Aby go zainstalować,
wystarczy w linii poleceń systemu ope-
racyjnego użyć narzędzia pear. Jeżeli
takowego nie posiadamy, jego instalacja
jest bardzo prosta i została szczegółowo
opisana na stronach PEAR-a.

Mając narzędzie pear jesteśmy gotowi

do instalacji XFC. W tym celu wystarczy
wpisać

pear install XML_FastCreate

.

Pamiętajmy, że instalacja niektórych pa-
kietów opcjonalnych XML_FastCreate,
które są w wersji beta lub alpha, może
wymagać użycia dodatkowego parametru
narzędzia pear. Przykładowo, dla wersji
beta będzie to:

pear -d preferred_state=beta

install nazwa_pakietu

Jeżeli ta składnia nie działa (co ma
miejsce w przypadku starszych wersji
narzędzia pear), to musimy sprawdzić na
stronie pakietu, w jakiej fazie znajduje się
jego najnowsza wersja (stable, alpha lub
beta) i uwzględnić tę fazę, jeśli jest różna
od stable, w sposób następujący:

pear install nazwa_pakietu-faza

np.:

pear install XML_Tree-beta

Wśród pakietów opcjonalnych współ-
pracujących z XFC można wymienić np.
XML_Tree, XML_DTD, XML_Beautifier
czy XML_HTMLSax. Ich użycie jest zale-
cane w celu pełnego wykorzystania możli-
wości XML_FastCreate.

XFC: pierwsze kroki

Aby skorzystać z XML_FastCreate, do-
łączamy plik XML/FastCreate.php (zob.
Listing 1) i tworzymy obiekt

$x

, będący

instancją klasy

XML_FastCreate

(uwaga:

używamy w tym celu należącej do kla-
sy

XML_FastCreate

metody statycznej

factory()

). Zainicjowanie $x wymaga po-

dania dwóch parametrów: pierwszy z nich
określa format wygenerowanego XML-a.
My używamy formatu

Text

, co oznacza,

że po użyciu metody toXML() (którą omó-
wimy później) uzyskamy XML w formie
tekstu (zserializowanej). Drugi parametr
stanowi tablicę asocjacyjną opcji, którą
również omówimy później.

Wspomnijmy, że jedną z najistotniej-

szych spośród tych opcji jest właściwy na-
główek

doctype

, który zostanie następnie

umieszczony w pierwszej linii pliku XML
i będzie określał DTD, na którym oparto
dokument. Nagłówek ten możemy zdefi-
niować ręcznie, ale XML_FastCreate daje
nam do wyboru kilka gotowych definicji
odpowiadających najczęściej używanym

doctype

. My użyjemy:

XML_FASTCREATE_DOCTYPE_
XHTML_1_0_STRICT

co w rezultacie daje nagłówek:

XHTML 1.0 Strict.

Stwórzmy teraz najprostszy dokument
XML, który będzie stroną XHTML-ową
zawierającą napis Hello World! w akapicie
(

<p>

..

</p>

) oraz tekst XML_FastCreate ja-

ko tytuł (tag

<title>

..

</title>

) i korzysta-

jącą z innych tagów typowych dla HTML-a
i XHTML-a (

<html>

,

<head>

i

<body>

).

Patrząc na kod z Listingu 2 zauważymy,
że wykorzystane tam metody (oprócz

toXML()

) obiektu

$x

mają takie same

nazwy, jak użyte przez nas tagi XHTML-
a. Wstawienie każdej z tych metod do
skryptu powoduje automatyczne utworze-
nie znacznika o takiej samej nazwie. Jest
to wielką zaletą XML_FastCreate, która
ułatwia tworzenie nawet rozbudowanych
dokumentów.

Zwróćmy też uwagę na zagnieżdżenie

metod reprezentujących znaczniki: zaczy-
namy od metody:

$x->html()

której parametrem jest:

$x->head()

która z kolei zawiera wywołania

head()

i

body()

. W ten sposób tworzymy strukturę

znaczników w XML_FastCreate, która po
użyciu metody

toXML()

zostanie przekształ-

cona na gotowy dokument XML (zob. Listing
3). UWAGA: toXML() jedynie wypisuje XML
na ekran; aby zapisać dokument w zmien-
nej, trzeba użyć metody getXML(), np.:

$xml_out=$x->getXML();

W tym przykładzie nie określiliśmy atrybutów
znaczników. Aby je dodać do określonego
znacznika, wystarczy umieścić je w tablicy
asocjacyjnej przekazanej jako pierwszy ar-
gument metody reprezentującej ten znacz-
nik. Przykładowo, aby utworzyć link (tag

<a

href>

...

</a>

) prowadzący do strony głównej

repozytorium PEAR, wpisujemy:

$x->a(array(‘href’=>’http://
pear.php.net’),’P.E.A.R.’)

Efektem będzie:

<a_href=”http://pear.php.net”>
P.E.A.R.</a>

Listing 1.

Tworzenie instancji XML_FastCreate

<?

php

require_once

'XML/FastCreate.php'

;

$x

=&XML_FastCreate::factory

(

'Text'

,

array

(

'doctype'

=

>

XML_FASTCREATE_DOCTYPE_XHTML_1_0_STRICT

)

)

;

?>

Listing 2.

Hello World! w XML-u przy użyciu XML_FastCreate

$x

-

>

html

(

$x

-

>

head

(

$x

-

>

title

(

'XML_FastCreate'

))

,

$x

-

>

body

(

$x

-

>

p

(

'Hello World !'

))

)

;

$x

-

>

toXML

()

;

Rysunek 1.

Przykład błędu polegające-

go na niezgodności XML-a z jego DTD

background image

XML_FastCreate

www.phpsolmag.org

40

Projekty

PHP Solutions Nr 6/2006

Już na podstawie tych przykładów może-
my się przekonać, jak łatwe i szybkie jest
tworzenie XML-a przy użyciu XML_Fast-
Create.

Wymuszanie

i weryfikacja

zgodności z DTD

Tworząc lub modyfikując dowolny doku-
ment XML powinniśmy się upewnić, czy
będzie on zgodny ze standardem DTD,
do czego często używamy dodatkowych
narzędzi. Użycie XML_FastCreate pozwa-
la nam zaoszczędzić czas dzięki funkcji
automatycznego wyświetlania błędów
składni XML-a.

Aby wymusić sprawdzanie DTD, mu-

simy mieć odpowiedni plik zawierający de-
finicje DTD (niektóre z nich, np. XHTML,
znajdują się w katalogu dtd zainstalowane-
go XML_FastCreate) i uruchomić jego ła-
dowanie podczas tworzenia instancji klasy

XML_FastCreate

. To drugie wykonamy do-

dając opcję

dtd

do wspomnianej wcześniej

tablicy asocjacyjnej (Listing 4). My załadu-
jemy plik xhtml_1_0_strict.dtd, będący defi-
nicją standardu XHTML 1.0 w wersji strict.

Jeżeli w składni XML-a wystąpi nie-

zgodność z DTD, komunikat o błędzie
zostanie wyświetlony podczas wywołania
wspomnianej już metody

toXML()

. Po-

zwala to np. na wyświetlenie go na końcu
strony WWW.

Na Listingu 5 podajemy przykład skryp-

tu generującego stronę XHTML-ową, w któ-
rej celowo wstawiliśmy błąd polegający na
pominięciu atrybutu

alt

w znaczniku

<img

src>

(co było dopuszczalne w HTML-u, ale

jest zabronione w XHTML-u). Po utworze-
niu strony, konwertujemy ją do postaci do-
kumentu XML jako zmienną

$err

. Następ-

nie korzystając z metody statycznej

PEAR:

:isError()

sprawdzamy, czy zmienna ta

zawiera komunikat o błędzie: jeżeli tak, to
go wypisujemy przy pomocy metody

$err-

>getMessage()

. Przykład wykonania tego

skryptu przedstawiamy na Rysunku 1.

Manipulacja

dokumentami XML

Przejdźmy teraz do omówienia rozmaitych
metod generowania i manipulacji doku-
mentami XML.

Jak już wiemy, użycie argumentu

Text

podczas tworzenia instancji klasy

XML_FastCreate powoduje, że skutkiem
użycia metody

toXML()

będzie wygenero-

wanie XML-a w formie tekstowej (zseriali-
zowanej). Gdybyśmy zamiast

Text

podali

XML_Tree

, utworzony zostałby obiekt klasy

XML_Tree

, która jest dostępna jako osobny

pakiet PEAR-owy.

Co więcej, możemy złożyć dokument

XML z kilku mniejszych bloków, co się
często przydaje, np. gdy generujemy jego
elementy korzystając z pętli czy instrukcji
warunkowych. Jest to wręcz zalecane,
gdyż umożliwia zachowanie przejrzysto-
ści – zarówno kodu aplikacji generującej
XML, jak i samego XML-a.

Bez ograniczeń możemy łączyć blo-

ki wygenerowane z użyciem parametru

Text

podczas tworzenia instancji doku-

mentu. Nie będzie również problemu, je-
żeli format jest inny (np.

XML_Tree

), o ile

wszystkie bloki są tego samego formatu.
Spójrzmy na Listing 6: łączymy na nim
dwa bloki typu

Text

, wygenerowane przy

użyciu utworzonej wcześniej instancji

$x

klasy

XML_FastCreate

(nie musimy po-

dawać żadnych parametrów oprócz ty-
pu XML-a).

Transformacje XML

XFC posiada opcję szybkiej transforma-
cji, której zadaniem jest zamiana wy-
branych znaczników na inne. Przykła-

Listing 3.

Rezultat XHTML przykładu z Listingu 2

<

?xml version=

"1.0"

encoding=

"UTF-8"

standalone=

"no"

?

>

<

!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/

xhtml1/DTD/xhtml1-strict.dtd"

>

<

html

><

head

><

title

>

XML_FastCreate

<

/title

><

/head

>

<

body

><

p

>

Hello World !

<

/p

><

/body

><

/html

>

Listing 4.

Tworzymy instancję XML_FastCreate sprawdzającą zgodność XML

z jego DTD

$x

=& XML_FastCreate::factory

(

'Text'

,

array

(

'doctype'

=

>

XML_FASTCREATE_DOCTYPE_XHTML_1_0_STRICT,

'dtd'

=

>

'xhtml_1_0_strict.dtd'

)

)

;

Listing 5.

Sprawdzamy zgodność XML z jego DTD

<?

php

require_once

'XML/FastCreate.php'

;

$x

=& XML_FastCreate::factory

(

'Text'

,

array

(

'doctype'

=

>

XML_FASTCREATE_DOCTYPE_XHTML_1_0_STRICT,

'dtd'

=

>

'xhtml_1_0_strict.dtd'

)

)

;

$x

-

>

html

(

$x

-

>

head

(

$x

-

>

title

(

'XML_FastCreate'

))

,

$x

-

>

body

(

$x

-

>

p

(

$x

-

>

img

(

array

(

'src'

=

>

'soleil.png'

))

)

)

)

;

if

(

PEAR::isError

(

$err

=

$x

-

>

toXML

()))

{

echo

nl2br

(

htmlSpecialChars

(

$err

-

>

getMessage

()))

;

}
?>

Listing 6.

Przykład konkatenacji (łączenia) dwóch tagów

$hello

=

$x

-

>

p

(

'Hello'

)

;

$world

=

$x

-

>

p

(

'World'

)

;

$body

=

$x

-

>

body

(

$hello

,

$world

,

)

;

$x

-

>

html

(

$x

->

head

(

$x

-

>

title

(

'XML_FastCreate'

))

,

$body

)

;

Rysunek 2.

Entytki umożliwiające zako-

dowanie znaków specjalnych w doku-

mentach XML

background image

XML_FastCreate

www.phpsolmag.org

42

Projekty

PHP Solutions Nr 6/2006

dowo, możemy w ten sposób uprościć
sobie składnię XML-a czy XHTML-a,
oznaczając tagi po swojemu, w spo-
sób dostosowany do naszych prefe-
rencji czy potrzeb programu, który z
tych danych korzysta. Transformacja z
XFC przyda się również przy konwersji
z XML-a na HTML-a. Spójrzmy na Li-
sting 7: przy tworzeniu instancji klasy

Listing 7.

Przykład zastosowania opcji ‘translate’

<?

php

require_once

'XML/FastCreate.php'

;

$x

=& XML_FastCreate::factory

(

'Text'

,

array

(

'doctype'

=

>

XML_FASTCREATE_DOCTYPE_XHTML_1_0_STRICT,

'dtd'

=

>

'xhtml_1_0_strict.dtd'

,

'translate'

=

>

array

(

'news'

=

>

array

(

'div'

)

,

'desc'

=

>

array

(

'p'

)

,

'title'

=

>

array

(

'

<

h1 class=

"title"

><

span

>

', '

<

/span

><

/h1

>

'

)

,

'date'

=>

array

(

'

<

span class

=

"date"

>

'

,

'

<

/span

>

'

)

)

)
)

;

$x

->

html

(

$x

->head

(

$x

->

_title

(

'XML_FastCreate'

))

,

$x

->

body

(

$x

->

news

(

$x

->

title

(

'News'

)

,

$x

->

date

(

'10-12-2005'

)

,

$x

->

desc

(

'blah blah blah'

)

)

)

)

;

if

(

PEAR::isError

(

$err

=

$x

->

toXML

()))

{

echo

nl2br

(

htmlSpecialChars

(

$err

->

getMessage

()))

;

}
?>

Listing 8.

Wariant cytowany w Listing 7 bez opcji ‘translate’

$x

-

>

div

(

$x

-

>

h1

(

array

(

'class'

=

>

'title'

)

,

$x

-

>

span

(

'News'

))

,

$x

-

>

span

(

array

(

'class'

=

>

'date'

)

,

'10-12-2005'

)

,

$x

-

>

p

(

'blah blah blah'

)

)

;

Listing 9.

Przykład zastosowania metody cdata()

$x

-

>

style

(

array

(

'type'

=>

'text/css'

,

'media'

=>

'all'

)

,

$x

-

>

cdata

(

"@import url

(

'example.css'

)

;

"

)

)

;

Listing 10.

Tworzymy instancję XML_FastCreate sprawdzającą zgodność XML

z jego DTD poprzez program zewnętrzny

$x

=& XML_FastCreate::factory

(

'Text'

,

array

(

'doctype'

=

>

XML_FASTCREATE_DOCTYPE_XHTML_1_0_STRICT,

'dtd'

=

>

'xhtml_1_0_strict.dtd'

,

'file'

=

>

'/tmp/XFC.xml'

,

'exec'

=

>

'xmllint --valid --noout /tmp/XFC.xml 2>&1'

,

)

)

;

XML_FastCreate

w tablicy asocjacyjnej

wpisujemy opcję

translate

, która z ko-

lei otwiera tablicę znaczników do tłuma-
czenia.Mamy tam tagi opisujące notkę
informacyjną (

<news>

,

<desc>

,

<title>

i

<date>

), które będą zamienione na

oryginalne znaczniki XML-a. Zwróć-
my szczególną uwagę na znacznik

<title>

: zostanie on przekonwertowany

na cały zestaw tagów (

<h1><span>...</

span></h1>

).

Gdybyśmy nie korzystali z XFC w ce-

lu ułatwienia konwersji znaczników, aby
osiągnąć ten sam efekt co na Listingu 7
musielibyśmy ręcznie wstawić wartości do
odpowiednich tagów XML-a, jak na Listin-
gu 8. Wracając do Listingu 7 zauważmy,
że po zdefiniowaniu tablicy transformacji
tworzymy kod XML metodą tradycyjną.
Tam również wystąpi znacznik

<title>

,

tyle że nie jest on tytułem naszej wiado-
mości, lecz standardowym tagiem

<title>

oznaczającym tytuł strony WWW i znanym
z HTML-a oraz XHTML-a. Aby uniknąć je-
go konwersji (która nastąpiłaby zgodnie
z regułami przetwarzania znaczników
naszych wiadomości), poprzedzamy jego
nazwę podkreśleniem (

_title

). Dzięki

temu generowany będzie standardowy
znacznik

<title>

..

</title>

.

Opcje i metody XFC

XFC zawiera kilka dodatkowych, przydat-
nych metod:

Ÿ

comment()

– pozwala na dodawanie

komentarzy w kodzie XML; ogranicz-
nikami komentarza są oczywiście tagi

<!--

i

-->

. Przykładowo, następujące

użycie tej metody:

Ÿ

$x->comment($x->p(‘Hello

World

!’))

Ÿ

spowoduje wygenerowanie kodu:

Ÿ

<!-- Hello World! -->

.

Ÿ

cdata()

–otacza wybraną zawartość

znacznikami

CDATA

. Jest to niezbędne,

kiedy musimy wprowadzić zawar-
tość, która niekoniecznie jest zgodna
z DTD, np. kod typu JavaScript czy
jakiś rodzaj importu stylów w ramach
strony XHTML. Bez

CDATA

zwyczajnie

nie da się umieścić takiej zawartości
w dokumencie XML. Przykład użycia

cdata()

przedstawiamy na Listingu 9.

Ÿ

quote()

– metody tej używamy, aby

przekonwertować wybrane znaki na
entytki (ang. entities). Jest to koniecz-
ne, gdyż umieszczenie pewnych zna-
ków (np.

&

) w dokumentach XML jest

niemożliwe i wygeneruje błąd. Metody

quote()

możemy używać w sposób

zautomatyzowany, jeżeli zadeklaruje-
my ją podczas definiowania obiektu
klasy XML_FastCreate jako

true

.

W takiej sytuacji, jeśli nie chcemy
używać tej opcji wobec określonych
części dokumentu, możemy wywołać
opcję

noquote()

(Rysunek 2). UWA-

background image

XML_FastCreate

Projekty

GA: jeżeli tworzymy dokument
XHTML, wyszukiwarka Microsoft In-
ternet Explorer (wersja 6 i niższe) nie
rozpoznaje encji

&apos

;. Aby uniknąć

jej konwersji, musimy umieścić opcję

apos

w

false

.

Należy też pamiętać o tym, że:

Ÿ

Kod XML jest generowany bez for-

matowania. Oznacza to, że wszystkie
znaczniki są wklejane i zagnieżdżane
bez przechodzenia do nowej linii czy
stosowania tabulacji. Jeżeli chcemy
uczynić kod XML bardziej czytelnym,
dodajmy opcję

indent

do

true

. Takie

formatowanie może jednak sprawić,
że dokumenty XML będą niezgodne
z DTD.

Ÿ

Niektóre nowe DTD, jak na przykład

XHTML 1.1, bazujące na kilku kar-
totekach, jeszcze nie są tolerowane.
Mimo to, za pomocą opcji

file

może-

my wydać XFC polecenie utworzenia
pliku tymczasowego i wykonania pro-
gramu zewnętrznego za pomocą opcji

exec

, przeznaczonej do takiej analizy.

Program xmllint doskonale sobie radzi
z takimi problemami, a przykład jego
użycia w ramach naszej aplikacji pre-
zentujemy na Listingu 10.

Ÿ

XFC ma kilka własnych, wbudowa-

nych metod, co przy specyficznym
sposobie traktowania znaczników (me-
toda ma taką samą nazwę, jak znacz-
nik, do którego się odnosi) powoduje
problemy, jeżeli chcemy zdefiniować

znaczniki o nazwach pokrywających
się z nazwami tych metod. Aby unik-
nąć tego problemu i zmusić XFC do
traktowania metody jako odnoszącej
się do znacznika, przed nazwą tagu
wstawiamy znak podkreślenia, np.

_quote()

.

Wygoda

użytkowania XFC

Aby uprościć tworzenie projektu korzy-
stającego z XML_FastCreate, zalecane
jest, aby inicjowanie instancji tej klasy
odbywało się w pliku, który będziemy do-
łączać do każdej ze stron. Inną opcją jest
generowanie tego obiektu wewnątrz funk-
cji, która będzie wywoływana na końcu
każdej strony.

Pamiętajmy też, że generowanie

XML-a zajmuje czas, przez co korzystanie
z XML_FastCreate będzie wolniejsze, niż
używanie gotowych, zapisanych na dysku
(czy w bazie danych) dokumentów XML.
Aby przyspieszyć dostęp do nich (tylko
w przypadku plików), możemy użyć narzę-
dzia keszującego, np. PEAR::Cache_Lite.

Konwersja

dokumentów HTML

Konwersję dokumentu HTML na XML uła-
twi załączony w pakiecie XML_FastCreate
skrypt HTML2XFC.php. Za jego pomo-
cą możemy przekształcić cały plik (skrypt
wywołujemy wtedy w linii poleceń) albo
wybrany fragment – uruchamiamy wte-
dy HTML2XFC.php jako makro w wybra-
nym edytorze programistycznym. W przy-

Guillaume Lecanu jest autorem pakie-

tu programów XML FastCreate, rozwija-

nego od przeszło 12 lat. Jego pasja pro-

gramowania zaczęła się od asemblera,

którego nauczył go na domowym kom-

puterze brat, twórca programów typu de-

mo. Niedawno Lecanu stworzył własną

firmę Noovea, która prezentuje pełnię je-

go możliwości.

Kontakt z autorem:

guillaume@lya.fr

O autorze

padku edytora vim wystarczy umieścić
w ~/.vimrc linię:

map ,fc :!HTML2XFC.php<CR>

wybrać do konwersji kod HTML i urucho-
mić makro wpisując

,fc

.

Podsumowanie

W tym artykule pokazaliśmy najciekaw-
sze spośród podstawowych zastosowań
XML_FastCreate. Jak widzimy, użycie tej
biblioteki znacznie upraszcza tworzenie,
manipulację i konwersję dokumentów
XML. Nie bez znaczenia jest również to,
że należy ona do repozytorium PEAR,
do którego trafiają wyłącznie sprawdzone
i działające projekty. Wraz z dodatkami ty-
pu XML_Tree, XML_FastCreate powinna
zająć miejsce wśród niezbędnych narzę-
dzi każdego programisty, który korzysta
z XML-a.

n

R

E

K

L

A

M

A


Wyszukiwarka

Podobne podstrony:
pai 06 XML
pai 06 XML 2
pai 06 XML
2006 05 XML i PHP w praktyce [XML]
2006 06 Wstęp do Scrum [Inzynieria Oprogramowania]
2006 06 nowotwory slinianek trzustki
PN EN 12697 7 2006 06 30
2006 06 23 053139 Set28 Verbal
2006 06 23 052914 Set25 Math
2006 06 23 053021 Set27 Verbal
2006 06 RSA w PHP chronimy nasze dane przy użyciu kryptografii asymetrycznej [Kryptografia](1)
hajn glosa do Mangold eps 2006 06 036
2006 06 Raport Wizerunek Sopotu wxrxd mieszkaxcxw Bad jakoxciowe
2006 06 23 053849 Set31 Verbal
mat fiz 2006 06 05
pg 2006 06 22
2006 06 05 matematyka finansowaid 25460
2006 06 08 Techn frezowania - zadanie, AGH, Semestr 8, Technologia wybranych elementów maszyn, cnc
Egzamin 2006.06.05, rozwiazania zadań aktuarialnych matematyka finansowa

więcej podobnych podstron