php5 and xml刻절
2018-09-07 13:25
PHP5돨XML劤景昑
鱗諒ChristianStocker럇陋ice_berg16(璣촘돨돗꿇훙)
충蕨돨뗍諒
侶튠匡覽돨충蕨뚤蹶角杰唐뚤PHP5돨XML劤묘콘먁菫혹돨몹몸彊틱돨PHP역랙諒。乖쳬솝땍뗍諒廊壞XML돨샘굶列街。횔랍,흔벎콱綠쒔瞳콱돨PHP뎠櫓賈痰죄XML,컸척侶튠匡覽冷삔횻콱肝樓렷풍。
썽??
瞳뎠쏟돨빳젬貢各썹,XML綠쒔꼇疼角寧몸珂統늦죄,劍綠쒔굳밤렉돨쌈肝뵨방렀돨賈痰죄。凜늪宮뚤黨PHP4,PHP5뚤黨XML돨連넣뫘肝돕죄路柬。瞳PHP4櫓콱충뚤돨섯빎떼角렷깃硫,API櫓뙤,코닸橘짤鹿섟페劍꼇供홍돨묘콘。쐴밗唐硅꼇璃綠쒔瞳PHP4.3櫓돤돕맣쏵,역랙諒쳬뻘角엄땍테폴覩唐돨덜쯤,瞳PHP5路畇홍꼬덜쯤。
侶튠匡覽쉥뚤PHP5櫓밑黨XML돨杰唐즈훙샴땡돨劤景昑磊寧썽?碧?
PHP4돨XML
豆퍅돨PHP경굶앎綠쒔역迦連넣XML죄,랍侶怜角寧몸샘黨SAX돨쌈왯,劍옵鹿햐漑돨썩驕훨부XML匡도。踞淪PHP4櫓속흙죄DOMXML윈嵐친욥,XML굳뫘봤돨連넣죄。빈윱XSLT隣槨껸념굳속죄쏵윱。瞳憐몸PHP4돨쌓뙈,페劍寧硅묘콘흔HTML,XSLT뵨DTD駱聯冷굳속돕죄DOMXML윈嵐櫓,꼇妗돨角,譚黨XSLT뵨DOMXML윈嵐迦老뇹黨茄駱쌓뙈,API꼬롸冷굳꼇岺寧늴돨錦맣,劍쳬뻘角꼇콘鹿칵훰렘駕갛陋。늪棍,DOMXML윈嵐청唐潾琦W3C齡땍돨DOM깃硫,랍唐菱성돨츱츰렘랬。祛횔瞳PHP4.3櫓侶꼬롸돤돕죄맣?틀▤祿瓷琁渼淵뮤㈉股齷潢뿅㈈┙僕껨촤凍貧뇩Уニ愰솔拉뿐鈞↕뭇쌀뻗則횃㉤캭溜誇б뿅㈘苧逾켑奸叔耭섯빎꼇옵콘錦릿。怜唐SAX윈嵐굳綠칵훰렘駕갛陋,페劍돨寧硅윈嵐닖灌돤돕밤렉돨賈痰。
샘黨杰唐侶硅覩凜,PHP돨XML역랙諒엄땍瞳PHP5路畇홍꼬덜쯤,깻潾琦賈痰깃硫。
PHP5돨XML
瞳PHP5櫓杰唐連넣XML돨꼬롸섯빎홍꼬路劤긍畇.君瞳돨杰唐XML윈嵐떼角샘黨GNOME淃커돨LIBXML2욋。侶쉥豚冀瞳꼇谿돨윈嵐친욥裂쇌빳宮꾸鱗,뵙懃역랙諒怜矜狼瞳寧몸뒀꿔돨욋?絿包極し⇒@煇髥Ц님撻컴渼疫騈潛뽈둑瀘뺨刮沽?鹿횻杰唐XML宮밑윈嵐돤돕맣?퉤?
뇜죄셨넓PHP4櫓壙츰돨SAX썩驕포裂棍,PHP5뻘連넣潾琦W3C깃硫돨DOM뵨샘黨LIBXSLT多헐돨XSLT。谿珂뻘속흙죄PHP뗌唐돨SimpleXML윈嵐뵨륜북깃硫돨SOAP윈嵐。踞淪XML督윱督굳路柬,PHP역랙諒엄땍瞳칵훰갛陋렘駕櫓속흙뫘뜩뚤XML돨連넣。侶앎雷瓘淪콱君瞳옵鹿賈痰SAX,DOM뵨SimpleXML,랍侶硅윈嵐쉥삔瞳뫘뜩돨륩蛟포?構꾕가H뻠搾憧?SLT뵨SOAP돨連넣,뻘矜狼瞳PHP긍陋珂굳鞫駕돨토零。
鑒앴직돨連넣
君瞳杰唐돨XML윈嵐떼連넣PHP鑒앴직,섦賈콱꼇닖PHP櫓殮쌈련狂。절흔,瞳PHP5櫓콱옵鹿닖寧몸匡숭샀닖寧係寧즈련狂鑒앴직。샘굶?謳猜炳뿔珉觀恝?鹿련狂팹繫匡숭돨뒈렘련狂PHP鑒앴직。
PHP4.3櫓숌狼돨썽?保疥暄北嘆г?HP5櫓綠쒔돤돕죄쏵寧꼍돨瓊멕,관벵匡숭닸혤,貢쭹닸혤뵨페劍꾸鱗,흔묾權寧敬묘콘변鑒。콱?芻좆?鹿賈痰PHP덜쯤윱茄君콱菱성돨鑒앴직,侶湳鑒앴닸혤쉥긴돤렷끽숌데。밑黨侶꼬롸돨뫘뜩玖쌘헝꽝옘PHP匡도。
SAX
SAX돨홍냔角SimpleAPIforXML,劍角痰黨썩驕XML匡도돨쌈왯,角샘黨쀼딧近駕돨。닖PHP3역迦앎綠쒔連넣죄SAX,돕君瞳冷청唐格댕돨긴뺏。瞳PHP5櫓,API쌈왯깻청唐맣긴,杰鹿콱돨덜쯤휄횔옵鹿頓契。顆寧꼇谿돨角劍꼇疼샘黨EXPAT욋,랍角샘黨LIBXML2욋。
侶몸긴뺏던윱죄寧硅뚤츱츰왕쇌連넣?溝켑奸授д綬則奸夙?IBXML2.2.6경굶櫓綠쒔돤돕썩엄。뎃角LIBXML2鹿품돨경굶櫓깻청唐썩엄,凜늪흔벎콱賈痰죄xml_parse_create_ns();퓻죠쉔累瞳콱돨溝固?構꾕?IBXML2.2.6。
DOM
DOM(匡도뚤蹶친謹)角譚W3C齡땍돨寧敬련狂XML匡도疳돨깃硫。瞳PHP4옵鹿賈痰DOMXML윱뚤늪쏵契꾸鱗,DOMXML돨離寮狼狂痙角劍꼇륜북깃硫돨츱츰렘랬。랍할瞳붤낀寧뙈珂쇌코뻘닸瞳코닸橘짤狂痙(PHP4.3綠쒔錦릿죄侶몸狂痙)。
劤돨DOM윈嵐角샘黨W3C깃硫供냥돨,관벵렘랬뵨橄昑츰냔。흔벎콱瞳페劍刀喇櫓坎咎DOM,절흔瞳Javascript櫓,컸척瞳PHP櫓긍畇잚慨돨묘콘쉥긴돤렷끽휭弄。콱꼇극첼늴떼꿴였匡도,凜槨렘랬뵨꽝鑒떼角宮谿돨。
譚黨賈痰죄劤돨W3C깃硫,샘黨DOMXML돨덜쯤쉥꼇콘頓契。瞳PHP櫓돨API唐붤댕돨꼇谿。뎃角흔벎콱돨덜쯤櫓賈痰죄잚慨W3C깃硫돨렘랬츱츰렘駕,盧濂깻꼇角붤위켜。콱怜矜狼쉥潼흙변鑒뵨괏닸변鑒錦맣,?쓱訓鑒츰櫓돨苟뺍窟(DOM깃硫賈痰看俚캡댕畇)。페劍몹뇹돨딧쌘뎠횔冷角극伎돨,뎃角寮狼쭉서꼬롸옵鹿괏넣꼇긴。
뗍혤DOM
乖꼇삔瞳侶튠匡覽櫓썩姦DOM윈嵐돨杰唐景昑,컸冷角청唐극狼돨。샀冀콱壇맡쉥匡도속흙蝎푯...옆怜必앉龜腺А?/a>
瞳侶튠匡覽돨댕뜩鑒절綾櫓乖쳬쉥賈痰谿寧몸XML匡숭,鞠鈞풍<紙Ⅵ?SS경굶。쉥苟충돨匡굶瀾季돕寧몸匡굶匡숭櫓깻괏닸槨articles.xml。
狼쉥侶몸절綾潼흙돕寧몸DOM뚤蹶,看邱狼눼쉔寧몸DOMDocument뚤蹶,횔빈潼흙XML匡숭。
$dom=newDomDocument();
$dom->load(articles.xml);
攣獗?衢椽謔消갠친?施?鹿賈痰PHP돨鑒앴직윱潼흙寧몸XML匡도,콱壇맡侶湳畇:
$dom->load(file:///articles.xml);
(샀諒페劍잚謹돨鑒앴직)
흔벎콱拳쉥XML匡도渴놔돕啞응포샀隣槨깃硫깃놔,賈痰:
print$dom->saveXML();
흔벎콱拳겉劍괏닸냥匡숭,헝賈痰:
print$dom->save(newfile.xml);
(鬧雷侶湳隣삔쉥匡숭댕鬼랙箇돕stdout)
뎠횔侶몸절綾청唐格뜩돨묘콘,횻乖쳬윱隣硅뫘唐痰돨。乖쳬윱혤돤杰唐돨title禱羹。唐붤뜩렘랬옵鹿곗돕,離숌데돨앎角賈痰getElementsByTagName($tagname):
$titles=$dom->getElementsByTagName(title);
foreach($titlesas$node){
print$node->textContent.\n;
}
textContent橄昑깻꼇角W3C깃硫,劍옵鹿횻乖쳬붤렘긱돨우醵뗍혤寧몸禱羹돨杰唐匡굶쌘듐,賈痰W3C돨깃硫뗍혤角苟충侶湳:
$node->firstChild->data;
(侶珂빅콱狼횅괏firstChild써듐角콱矜狼돨匡굶써듐,뤠橙콱뻘돤깁저杰唐綾써듐윱꿴冷)。
쥼棍寧몸狼鬧雷돨狂痙角getElementsByTagName()럿쀼寧몸DomNodeList,뚤蹶,랍꼇角獗PHP4櫓get_elements_by_tagname()컸湳럿쀼寧몸鑒莉,뎃角攣獗콱瞳侶몸절綾櫓였돕돨컸湳,콱옵鹿賈痰foreach刀얌햐漑돨깁저劍。콱冷옵鹿殮쌈賈痰$titles->item(0)윱련狂써듐。맡렘랬쉥럿쀼뒤寧몸title禱羹。
쥼寧몸혤돤杰唐title禱羹돨곗랬角닖몽써듐깁저,콱옵鹿였돕,侶몸렘랬뫘릿憧,뎃角흔벎콱矜狼돨꼇怜角title禱羹돨珂빅,侶몸렘랬冷앎뫘쥣삶。
foreach($dom->documentElement->childNodesas$articles){
//흔벎쌘듐角寧몸禱羹(nodeType==1)깻할츰俚角item앎셨崎琦뻔
if($articles->nodeType==1&&$articles->nodeName==item){
foreach($articles->childNodesas$item){
//흔벎쌘듐角寧몸禱羹,깻할츰俚角title앎댔丹劍.
if($item->nodeType==1&&$item->nodeName==title){
print$item->textContent.\n;
}
}
}
}
XPath
XPaht앎獗角XML돨SQL,賈痰XPath콱옵鹿瞳寧몸XML匡도櫓꿴璂륜북寧硅친駕刀랬돨景땍써듐。拳賈痰XPath삿돤杰唐title써듐,怜矜狼侶척隣:
$xp=newdomxpath($dom);
$titles=$xp->query(/articles/item/title);
foreach($titlesas$node){
print$node->textContent.\n;
}
?>
侶湳뵨賈痰getElementsByTagName()렘랬뀌꼇뜩,뎃角Xpath狼퓻댕돨뜩,절흔,흔벎乖쳬唐寧몸title禱羹角article돨綾禱羹(랍꼇角item돨綾禱羹),getElementsByTagName()앎삔쉥劍럿쀼。랍賈痰/articles/item/title刀랬,乖쳬怜삔돤돕瞳寧땍?錚횐誥뿟천?itle禱羹。侶怜角寧몸숌데돨절綾,疼?苧率뻐施?콘角侶湳:
/articles/item[position()=1]/title럿쀼뒤寧몸item禱羹돨杰唐
/articles/item/title[@id=23]럿쀼杰唐벵唐id橄昑깻할令槨23돨title
/articles//title럿쀼杰唐articles禱羹苟충돨title(陋諒鬧://덜깊훨雷?錚?
콱冷옵鹿꿴璂벵唐景喝琴뒬禱羹돨듐,벵唐景喝匡굶코휭돨禱羹,샀諒賈痰츱츰왕쇌된된。흔벎콱극伎댕좆돨꿴璂XML匡도,刊뎠돨欺構賈痰XPath삔쌘伽콱붤뜩珂쇌,劍賈痰숌데,獵契醵똑우,궐깃硫돨DOM矜狼뫘?姆캑響濡?
蕨DOM櫓畇흙鑒앴
匡도뚤蹶친謹깻꼇角怜콘뗍혤뵨꿴璂,콱冷옵鹿꾸鱗뵨畇흙。(DOM깃硫唐듐휵낀,凜槨긍畇諒拳쐴좆連넣콘뭘拳獗돕돨첼寧몸뻔쓱,뎃角劍묏鱗돨렷끽봤)。였였苟충侶몸절綾,劍瞳乖쳬돨article.xml匡숭櫓警속죄寧몸劤禱羹。
$item=$dom->createElement(item);
$title=$dom->createElement(title);
$titletext=$dom->createTextNode(XMLinPHP5);
$title->appendChild($titletext);
$item->appendChild($title);
$dom->documentElement->appendChild($item);
print$dom->saveXML();
看邱,乖쳬눼쉔죄杰唐矜狼돨써듐,寧몸item禱羹,寧몸title禱羹뵨寧몸관벵item깃痙돨匡굶써듐,횔빈乖쳬쉥杰唐돨써듐졍쌈폅윱,겉匡굶써듐속돕title禱羹??겉title禱羹속돕item禱羹?句ё咀札櫓품?tem禱羹꿨흙돕articles몽禱羹?區O盧紋?櫓풩?ML匡도櫓唐寧몸劤돨匡覽죗깊죄。
윈嵐잚(class)
봤죄,?衢役컥洶澾셀?鹿瞳PHP4苟충痰DOMXML윈嵐윱隣(怜角API唐寧硅꼇谿),콘뭘菱성윈嵐DOM잚角PHP5돨寧몸劤景昑,侶賈돤蝎畇뫘뜩옵뗍昑퓻돨덜쯤긴돤옵콘。苟충角痰DOMDocument잚路劤畇돨憐몸절綾:
classArticlesextendsDomDocument{
function__construct(){
//극伎딧痰!
parent::__construct();
}
functionaddArticle($title){
$item=$this->createElement(item);
$titlespace=$this->createElement(title);
$titletext=$this->createTextNode($title);
$titlespace->appendChild($titletext);
$item->appendChild($titlespace);
$this->documentElement->appendChild($item);
}
}
$dom=newArticles();
$dom->load(articles.xml);
$dom->addArticle(XMLinPHP5);
print$dom->save(newfile.xml);
HTML
PHP5櫓寧몸쒔끽꼇굳鬧雷돕돨景昑角libxml2욋뚤HTML돨連넣,콱꼇쏭옵鹿賈痰DOM윈嵐潼흙써뭐좁봤(well-formed)돨XML匡도,뻘옵鹿潼흙렷써뭐좁봤돨(not-well-formed)HTML匡도,겉劍뎠隣깃硫돨DOMDocument뚤蹶,賈痰杰唐콘痰돨렘랬뵨景昑,궐흔XPath뵨SimpleXML。
뎠콱矜狼련狂寧몸콱轟랬왠齡籃듐돨코휭珂,HTML돨昑콘앎鞫刻枷롸唐痰죄。瞳XPath,XSLT샀SimpleXML돨곤燎苟,콱伽딜죄冀뜩덜쯤,獗賈痰攣橙깊댐駕궐싹俚륜눔샀諒SAX썩驕포。뎠HTML匡도써뭐꼇角붤봤돨珂빅,侶몸곗랬談페唐痰(侶角몸틉런돨狂痙!)。
苟충돨덜쯤삿돤깻썩驕看女,쉥럿뒤寧몸title禱羹돨코휭。
$dom=newDomDocument();
$dom->loadHTMLFile(
$title=$dom->getElementsByTagName(title);
print$title->item(0)->textContent;
헝鬧雷뎠寧땍禱羹청唐冷돕珂,콱돨渴놔옵콘삔관벵댄轎。흔벎콱돨貢籃뻘瞳賈痰PHP渴놔HTML4덜쯤,唐寧몸봤句口狼멩据콱,DOM윈嵐꼇쏭콘潼흙HTML匡도,랍할뻘콘쉥儉쳬괏닸槨HTML4목駕돨匡숭。瞳콱警속供DOM匡도빈,賈痰$dom->saveHTML()윱괏닸。狼鬧雷돨角,槨죄賈渴놔돨HTML덜쯤륜북W3C깃硫,離봤꼇痰賈痰憐펭돨윈嵐?(tidyextension)。Libxml2욋連넣돨HTML깻꼇삔옘쪄돕첼몸옵콘랙?骸켁쪄繇б께뼛甁甁천캑╂疵핏ⓖ첩誅슉켁鍔濡?
駱聯
XML匡도돨駱聯督윱督路狼죄。절흔,흔벎콱닖寧硅벌棍栗都櫓삿돤죄寧몸XML匡도,瞳콱뇹잿裂품콱矜狼쇱駱劍角뤠륜북캐몸횅땍돨목駕。妗頓돨角콱꼇矜狼瞳PHP櫓畇菱성돨駱聯넋埼,凜槨콱옵鹿賈痰힛몸壇痰離밤렉돨깃硫裂寧(DTD,XMLSchema샀RelaxNG)윱供냥劍。.
DTD角寧몸끓?赫?GML珂덜돨깃硫,홧?沒뿅?ML돨劤景昑(흔츱츰왕쇌),랍할譚黨劍꼇角痰XML畇돨,劍冷붤켜굳썩驕뵨瘻뻣。
XMLSchemai角譚W3C齡땍돨寧몸깃硫,劍壇痰밤렉,섯빎관벵죄杰唐駱聯XML匡도杰矜狼돨코휭。
RelaxNG角릿憧돨XMLSchema깃硫돨뚤庫,角譚菱譚諒莉廉눼쉔돨,譚黨劍궐XMLSchema뫘휭弄茄君,督윱督뜩돨넋埼역迦連넣RelaxNG죄
흔벎콱청唐瑙즛苟윱돨셕뺍匡도샀諒렷끽릿憧돨XML匡도,컸척賈痰RelaxNG걸。劍蝎畇뵨敦뗍떼궐싹숌데,督윱督뜩돨묏야冷連넣劍。?芻좀밉妗뻗峙ㅎ颯?rang,劍옵鹿닖XML렀굶櫓菱땡눼쉔寧몸RelaxNG匡도。랍할怜唐RelaxNG(뵨일뺏돨DTDS)굳libxml2供홍連넣,쐴밗libxml2冷섦쉥供홍連넣MLSchema。
駱聯XML匡도돨刀랬宮뎠숌데:
$dom->validate(articles.dtd);
$dom->relaxNGValidate(articles.rng);
$dom->schemaValidate(articles.xsd);
커품,杰唐侶硅떼怜삔숌데돨럿쀼true샀false,댄轎삔굳隣槨PHP쒸멩渴놔。鞫횔拳럿쀼못痰빵堂봤돨斤口侶깻꼇角寧몸봤寮雷,瞳PHP5.0鹿빈돨경굶쟁삔唐杰맣?퉤5슉琉촬憁늦둑靈옳갱밋蜜鈴陪櫓,뎃角댄轎괩멩완땍삔뇹잿돨뫘봤。
SimpleXML
SimpleXML角PHP돨XML소痢櫓離빈寧몸굳속흙돨냥逃,속흙SimpleXML윈嵐돨커돨角槨죄瓊묩寧몸賈痰깃硫뚤蹶橄昑뵨딱덜포련狂XML匡도돨뫘숌데돨렘랬。맡윈嵐청唐格뜩돨렘랬,祛횔흔늪劍뻘角宮뎠퓻댕돨。닖乖쳬돨匡도돨혤돤杰唐title쌘듐궐覩윱矜狼뫘?姆캑響濡?
$sxe=simplexml_load_file(articles.xml);
foreach($sxe->itemas$item){
print$item->title.\n;
}
侶角瞳맴痂척?看邱쉥articles.xml潼흙돕寧몸SimpleXML뚤蹶。횔빈혤돤杰唐$sxe櫓돨item禱羹,離빈$item->title럿쀼title禱羹돨코휭,앎角侶湳。콱冷옵鹿賈痰밑젬鑒莉꿴璂橄昑,賈痰:$item->title[id]。
였돕죄걸,侶빈충廬角格?綢姸甲в契瓷淅뽕У캅痍㉮?鹿돤돕乖쳬拳狼돨써벎,절흔,$item->title[0]럿쀼뵨절綾櫓宮谿돨써벎,쥼寧렘충,foreach($sxe->item->titleas$item)怜럿쀼뒤寧몸title,깻꼇角杰唐瞳匡도櫓돨title禱羹。(앎獗乖瞳XPath櫓渡퍅돨컸湳)。
SimpleXML茄셥?銶필밉쳅?end多헐2劤景昑돨뒤寧몸윈嵐。凜늪冷냥죄侶硅劤景昑돨꿎桿듐,콱狼列돛瞳역랙쌓뙈bugs뵨꼇옵渡죕돨댄轎옵꼇角?木爻?
뇜죄?衢堧洶棠菫學밉천캇湧櫶漢戟湄匙캠슘ªг?impleXML櫓冷唐寧몸XPath쌈왯,劍槨련狂데몸써듐瓊묩죄뫘숌데돨곗랬。
foreach($sxe->xpath(/articles/item/title)as$item){
print$item.\n;
}
꼇옵뤠훰,侶뙈덜쯤冷꼇궐품충절綾櫓돨똬,뎃角瓊묩죄뫘릿憧샀뫘?諍컸똬?ML匡도,콱삔랙君뵨SimpleXML寧폅賈痰XPath삔쌘伽콱붤뜩돨渴흙。
蕨SimpleXML匡도畇흙鑒앴
콱꼇쏭옵鹿썩驕뵨뗍혤SimpleXML,랍할뻘옵鹿맣긴SimpleXML匡도。逞?睦櫓퓬談率뿅㈏⒤묍?
$sxe->item->title=XMLinPHP5;//title禱羹돨劤코휭。
$sxe->item->title[id]=34;//title禱羹돨劤橄昑。
$xmlString=$sxe->asXML();//쉥SimpleXML뚤蹶隣槨埼죗뺏돨XML俚륜눔럿쀼
print$xmlString;
빳痰葵鱗昑
譚黨SimpleXML冷角샘黨libxml2욋돨,콱옵鹿瞳섯빎꼇緞捲醵똑돨헙워苟햐漑돨쉥SimpleXML뚤蹶瘻뺏냥DomDocument뚤蹶。(匡도꼇痰쏵契코꼬릿齡),譚黨侶몸샙齡,콱撻唐죄랗몸뚤蹶돨離봤꼬롸,賈痰寧몸刊북콱癎庫묏鱗돨묏야걸,劍角侶湳賈痰돨:
$sxe=simplexml_import_dom($dom);
$dom=dom_import_simplexml($sxe);
XSLT
XSLT角痰윱쉥XML匡도瘻뻣槨페劍XML匡도돨刀喇,XSLT굶?綽핥?ML긍畇돨,橄黨묘콘昑刀喇소痢,瞳넋埼뇹잿?瞿稿易陶冬慘姃淘ⓒ?HP)唐杰꼇谿。PHP4櫓唐랗蘆XSLT뇹잿포:Sablotron(瞳밤렉賈痰돨XSLT윈嵐櫓)뵨Libxslt(瞳domxml윈嵐櫓),侶좃蘆API꼇빳宮쇗휭,깻할賈痰렘랬冷꼇宮谿。PHP5怜連넣libxslt뇹잿포,裂杰鹿朞嶝劍角凜槨劍角샘黨Libxml2돨,凜늪冷뫘륜북PHP5돨XML매쿡。
잿쬠?絿?ablotron곬땍돕PHP5?菊꽈퓻?콘돨,뎃角꼇妗돨角청훙윱隣。凜늪,흔벎콱攣瞳賈痰Sablotron,콱꼇돤꼇瞳PHP5櫓학뻣돕libxslt뇹잿포。Libxslt角던唐Javascript嫩끽뇹잿連넣돨Sablotron,?芻좆?鹿賈痰PHP퓻댕돨鑒앴직윱路劤茄君Sablotron뗌唐돨셕뺍뇹잿(schemehandlers)。늪棍,libxslt角離우돨XSLT뇹잿포裂寧,杰鹿콱뻘출롤돤돕죄醵똑돨瓊?爻#ⓙ닉菫帽훗?ablotron돨랗굡)。
뵨굶匡擎쬠돨페劍윈嵐寧湳,콱옵鹿瞳XSL윈嵐,DOM윈嵐뵨viceversa裂쇌슥뻣XML匡도,茄셥?句?繩望逾촹輸닝吹б榛?XT/XSL윈嵐깻청唐潼흙뵨괏닸XML匡도돨쌈왯,怜콘賈痰DOM윈嵐。寧역迦欺構XSLT瘻뻣,콱꼇矜狼廊壞格뜩돨코휭,侶쟁冷꼇닸瞳W3C깃硫,凜槨侶몸API櫓닖Mozilla“썼”법윱돨。
看邱콱矜狼寧몸XSLT湳駕깊,쉥苟죗匡굶瀾季돕寧몸劤匡숭깻할괏닸뿍articls.xsl
횔빈痰PHP신굶딧痰劍::
/*쉥XML뵨XSL匡도潼흙돕DOMDocument뚤蹶*/
$xsl=newDomDocument();
$xsl->load(articles.xsl);
$inputdom=newDomDocument();
$inputdom->load(articles.xml);
/*눼쉔XSLT뇹잿포,깻돔흙湳駕깊*/
$proc=newXsltProcessor();
$xsl=$proc->importStylesheet($xsl);
$proc->setParameter(null,titles,Titles);
/*瘻뻣깻渴놔XML匡도*/
$newdom=$proc->transformToDoc($inputdom);
print$newdom->saveXML();
?>
?衢役컥洶錟凜훗밉?OM돨렘랬load()潼흙XSLT湳駕깊articles.xsl,횔빈눼쉔죄寧몸劤돨XsltProcessor뚤蹶,맡뚤蹶돔돕죄빈충狼賈痰죄XSLT湳駕깊뚤蹶,꽝鑒옵鹿侶湳?阮?etParameter(namespaceURI,name,value),離빈XsltProcessor뚤蹶賈痰transformToDoc($inputdom)역迦瘻뻣깻럿쀼寧몸劤돨DOMDocument뚤蹶。
.侶몸API돨膽듐瞳黨콱옵鹿賈痰谿寧몸湳駕깊瘻뻣冀뜩XML匡도,怜矜狼쉥劍潼흙寧늴횔빈路릿賈痰劍,凜槨transormToDoc()변鑒옵鹿壇痰黨꼇谿돨XML匡도。
뇜죄transormToDoc(),뻘唐랗몸痰黨瘻뻣돨렘랬:transformToXML($dom)럿쀼寧몸俚륜눔,transformToURI($dom,$uri)쉥瘻뻣裂빈돨匡도괏닸돕匡숭샀寧몸PHP鑒앴직。鬧雷흔벎콱拳賈痰XSLT돨寧몸刀랬흔샀indent=yes,콱꼇콘賈痰transformToDoc(),凜槨DOMDocument뚤蹶꼇콘괏닸맡斤口,怜콘뎠콱쉥瘻뻣빈돨써벎殮쌈괏닸돕俚륜눔샀匡숭櫓珂꼽콘侶湳隣。
딧痰PHP변鑒
XSLT윈嵐離빈寧몸劤속돨景昑角콘뭘瞳XSLT湳駕깊코꼬딧痰훨부PHP변鑒,寮蠟攣固돨XML連넣諒寧땍꼇삔毆뻑侶몸묘콘(侶湳돨湳駕깊唐듐릿憧,붤휭弄살歸쭉서뵨?雍?,瞳캐硅뒈렘홱角枷롸唐痰돨。뎠?轢갠스鑒珂XSLT앎긴돤붤唐掘,섦賈拳茄君痰꼇谿돨刀喇渴놔寧몸휑퍅冷角렷끽쮸럼돨。뎃角賈痰侶몸묘콘,뇹잿侶硅앎뵨怜賈痰PHP寧湳휭弄。苟충角蕨XSLT警속寧몸변鑒돨덜쯤:
functiondateLang(){
returnstrftime(%A);
}
$xsl=newDomDocument();
$xsl->load(datetime.xsl);
$inputdom=newDomDocument();
$inputdom->load(today.xml);
$proc=newXsltProcessor();
$proc->registerPhpFunctions();
//潼흙匡도깻賈痰$xsl윱뇹잿
$xsl=$proc->importStylesheet($xsl);
/*瘻뻣깻渴놔XML匡도*/
$newdom=$proc->transformToDoc($inputdom);
print$newdom->saveXML();
?>
苟충角XSLT湳駕깊datetime.xsl,劍삔딧痰侶몸변鑒。
苟충角狼賈痰湳駕깊瘻뻣돨XML匡도,today.xml(谿잿,articles.xml冷삔돤돕谿湳써벎)。
?衢役켜學쉽粒?HP신굶뵨杰唐돨XML匡숭삔痰뎠품溝固?阮천켤姃豚牙飭픗湄컬胡煉D施?鹿못php:function()警속뫘뜩돨꽝鑒,警속돨꽝鑒삔굳눈뒵못PHP변鑒。侶쟁唐寧몸변鑒php:functionString(),侶몸변鑒菱땡쉥杰唐渴흙돨꽝鑒瘻뻣槨俚륜눔,杰鹿콱꼇矜狼瞳PHP쟁쏵契瘻뻣。
鬧雷콱矜狼瞳瘻뻣裂품딧痰$xslt->registerPhpFunctions(),뤠橙PHP변鑒딧痰쉥凜槨갛홍覩凜꼇삔굳獵契(콱迦老宮斤콱돨XSLT湳駕깊찐?)。커품련狂溝固뻘청唐茄君,冷冀瞳쉥윱PHP5돨경굶櫓삔茄君侶몸묘콘。
落狼
PHP뚤XML돨連넣綠쒔蕨품찢쏵죄寧댕꼍,劍륜북깃硫,묘콘퓻댕,빳痰葵鱗昑퓻,굳鱗槨칵훰朞淃갛陋,綠굳竿홈賈痰。劤속흙돨SimpleXML윈嵐瓊묩죄숌데우醵련狂XML匡도돨렘랬,옵鹿쌘伽콱붤뜩돨덜쯤,談페角뎠콱唐써뭐뺏匡도샀諒옵鹿賈痰퓻댕돨XPath珂。
먁剋libxml2―PHP5XML윈嵐杰賈痰돨뒀꿔욋,賈痰DTD,RelaxNG샀XMLSchema駱聯XML匡도君瞳綠쒔굳連넣죄。
XSL連넣冷돤돕죄럇劤,君瞳賈痰Libxslt욋,궐覩윱돨Sablotron욋瞳昑콘?鞠克幷察搔山Ф幣蠟г?SLT湳駕깊코꼬딧痰PHP변鑒옵鹿횻콱畇놔뫘퓻댕돨XSLT덜쯤。
흔벎콱綠쒔瞳PHP4샀페劍刀喇櫓賈痰죄XML,콱삔毆뻑PHP5돨XML景昑돨,XML瞳PHP5櫓唐죄붤댕돨긴뺏,륜북깃硫,뵨페劍묏야,刀喇角谿된돨。
졍쌈
PHP4宮밑
Domxml윈嵐:
Sablotron윈嵐:
Libxslt:
PHP5宮밑
SimpleXML:
Streams:
깃硫
DOM:
XSLT:
XPath:
XMLSchema:
RelaxNG:
Xinclude:
묏야
Libxml2,theunderlyinglibrary:
Trang,aSchema/RelaxNG/etcconverter:
밑黨鱗諒
ChristianStocker角坑잭却BitfluxGmbH무鱇돨눼迦훙뵨CEO,儉角XSL,DOM뵨imagick윈嵐돨郭빱훙逃,돠刀蝎석PHPdeLuxe돨북鱗鱗諒,谿珂鈴제黨페劍역都淃커,흔BitfluxEditor뵨Popoon.。옵鹿繫痰chregu@php.net.뵨儉젬溝。
上一篇:模仿OSO的论坛(五)