xslt_process

(PHP 4 >= 4.0.3)

xslt_process -- végrehajtja az XSLT transzformációt

Leírás

mixed xslt_process ( resource xh, string xml, string xsl [, string result [, array arguments [, array parameters]]])

Az új XSLT kiterjesztés magva a xslt_process() függvény. Ezzel lehet XSLT transzformációkat végezni szinte mindenféle forrású adaton - az argumentum puffer koncepiójára építve. Az argumentum puffer elképzelése a Sablotron XSLT feldolgozótól származik, amely jelenleg az egyetlen támogatott XSLT feldolgozó ehhez a kiterjesztéshez.

A legegyszerűbb transzformáció, ha az xslt_process() fájlokon dolgozik: a megadott XML fájlt egy XSLT fájl alapján transzformál és a végeredményt egy harmadikba írja. Ez Sablotronnal tényleg elég egyszerű...

Példa 1. Az xslt_process() használata XML fájl XSLT transzformációjára. A végeredmény is fájlba kerül

<?php

// új XSLT feldolgozó lefoglalása
$xh = xslt_create();

// dokumentum feldolgozása
if (xslt_process($xh, 'minta.xml', 'minta.xsl', 'eredmeny.xml')) {
    print "SIKER, a minta.xml a minta.xsl alapján feldolgozásra került,";
    print " az eredmeny.xml tartalmazza a muvelet vegeredmenyet, ami:<br />\n";
    print "<pre>\n";
    readfile('eredmeny.xml');
    print "</pre>\n";
}
else {
    print "Sajnálom, a minta.xml-t nem lehet a minta.xsl alapján feldolgozni,";
    print "amelynek az oka: " . xslt_error($xh);
    print " és a hibakódja: " . xslt_errno($xh);
}

xslt_free($xh);

?>

Bár nagyon hasznos ez a müködési elv, sokszor, főképp webes környezetben a kimenetet közvetlenül ki kell iratni, nem pedig fájlba menteni; ezért a harmadik paraméter elhagyása vagy NULL értéke esetén, az xslt_process() automatikusan az XSLT transzformáció eredményével tér vissza.

Példa 2. Az xslt_process() XML fájl XSL fájl alapú transzformációjának eredménye változóba kerül elmentésre

<?php

// új XSLT feldolgozó lefoglalása
$xh = xslt_create();

// dokumentum feldolgozása
$result = xslt_process($xh, 'minta.xml', 'minta.xsl');
if ($result) {
    print "SIKER, a minta.xml a minta.xsl alapján feldolgozásra került,";
    print " amelynek az eredménye a \$result változóba került: <br />\n";
    print "<pre>\n";
    print $result;
    print "</pre>\n";
}
else {
    print "Sajnálom, a minta.xml-t nem lehet a minta.xsl alapján feldolgozni,";
    print "amelynek az oka: " . xslt_error($xh);
    print " és a hibakódja: " . xslt_errno($xh);
}

xslt_free($xh);

?>

A két fenti eset a XSLT transzformáció két legegyszerűbb esete, ám merem állítani a leggyakoribb módjai is ennek. Vannak olyan helyzetek azonban, amikor az XML és az XSLT fájlok nem állnak rendelkezésre, hanem azok külső forrásból - pl. adatbázisból vagy hálózaton keresztül érkeznek. Ekkor az XML és XSLT adatok csak változók formájában hozzáférhetők, és piaci alkalmazások esetén a fájlba másolás okozta veszteség nem megengedhető. Ebben segít az XSLT "argument" szintaxisa. XML és XSLT fájlok helyett ún. "argumentum helyfoglalókat" lehet definiálni, amelyek helyett az arguments (5.) paraméterben megadott tartalmat fogja használni az XSLT feldolgozó. A következő példa egyetlen fájlt sem használ.

Példa 3. Using the xslt_process() to transform a variable containing XML data and a variable containing XSL data into a variable containing the resulting XML data

<?php
// $xml és $xsl tartalmazza az XML és XSL adatokat

$arguments = array(
     '/_xml' => $xml,
     '/_xsl' => $xsl
);

// új XSLT feldolgozó allokálása
$xh = xslt_create();

// a dokumentum feldolgozása
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
    print "SIKER, a minta.xml a minta.xsl alapján feldolgozásra került,";
    print " amelynek az eredménye a \$result változóba került: <br />\n";
    print "<pre>\n";
    print $result;
    print "</pre>\n";
}
else {
    print "Sajnálom, a minta.xml-t nem lehet a minta.xsl alapján feldolgozni,";
    print "amelynek az oka: " . xslt_error($xh);
    print " és a hibakódja: " . xslt_errno($xh);
}

xslt_free($xh);
?>

Végezetül, az xslt_process() utolsó, parameters paraméterében bármlyen adat átadható az XSLT feldolgozónak az XSL dokumentumhoz. Ezeket a paramétereket az XSL-en belül <xsl:param name="parameter_name"> utasítással érhetők el.