(PHP 4 >= 4.0.3)
xslt_process — Bir XSLT dönüşümü gerçekleştirir
$işlemci
, string $xml_taşıyıcı
, string $xsl_taşıyıcı
[, string $sonuç_taşıyıcı
[, array $taşıyıcılar
[, array $değiştirgeler
]]] )xslt_process() işlevi asıl dönüşümün yapıldığı işlevdir. Dönüşüm için hemen hemen her tür girdi kaynağının (taşıyıcı) kullanımını mümkün kılar. Bu değiştirge olarak belirtilen tamponlarla sağlanır. Buradaki tampon kavramı Sablotron XSLTişlemcisine özgüdür (şimdilik bunu destekleyen tek XSLT işlemcidir). Girdi taşıyıcıları öntanımlı olarak işlenecek dosyayı içeren (taşıyan) birer dosya ismidir.
işlemci
xslt_create() tarafından oluşturulmuş bir XSLT işlemci özkaynağı.
xml_taşıyıcı
XML dosyasının yolu veya XML değiştirgesi için yer tutucu.
xsl_taşıyıcı
XSL dosyasının yolu veya XSL değiştirgesi için yer tutucu.
sonuç_taşıyıcı
Öntanımlı olarak, dönüşümün sonucunda elde edilen belgeyi içeren
dosyanın ismidir. Bu değiştirgede NULL
belirtilirse sonuç, işlevin
dönüş değeri olur.
taşıyıcılar
Bir dizi olup, XML ve XSLT değiştirgelerinde dosya ismi yerine bu dizinin anahtarları birer yer tutucu olarak belirtilir.
değiştirgeler
XSLT belgesine aktarılacak üst düzey değiştirgeleri içeren dizi. Bunlar, XSL dosyalarında <xsl:param name="değiştirge_ismi"> ifadeleriyle erişilebilen değiştirgelerdir. Değiştirgeler UTF-8 ile kodlanmış, Sablotron tarafından birer dizge olarak işlenebilir değerler içermelidir. Başka bir deyişle, XSLT belgeye değiştirge olarak işlenmek üzere bir düğüm kümesi aktaramazsınız.
Taşıyıcılar, taşıyıcılar
dizisi üzerinden de
aktarılabilir (örneklere bakınız).
Başarı durumunda TRUE
, başarısızlık durumunda FALSE
döner. Sonuç taşıyıcısı olarak NULL
belirtilirse, sonuç, işlevin
dönüş değeri olur.
Sürüm: | Açıklama |
---|---|
4.0.6 |
xml_taşıyıcı ve
xsl_taşıyıcı değiştirgelerinde artık XML
dizgeleri kabul edilmiyor. Sablotron'un 0.95 veya üstü sürümlerine XML
içeren bir dizgenin aktarılması artık bir parçalanma arızasına sebep
olmaktadır.
|
xslt_process() işlevi ile yapılan en basit dönüşüm türü, bir XML dosyayı bir XSLT dosya ile işleyip sonucu (XML veya HTML olarak) üçüncü bir dosyaya yerleştirmektir. Sablotron ile bunu yapmak çok kolaydır.
Örnek 1 - Bir XML dosyayı bir XSLT dosya ile işleyip sonucu bir XML dosyaya yazmak
<?php
// Yeni bir XSLT işlemcisi ayıralım
$xh = xslt_create();
// Belgeyi dönüştürelim
if (xslt_process($xh, 'örnek.xml', 'örnek.xsl', 'sonuç.xml')) {
echo "TAMAMDIR, örnek.xml, örnek.xsl tarafından sonuç.xml dosyasına ";
echo "dönüştürüldü. sonuç.xml dosyasının içeriği:\n<br />\n";
echo "<pre>\n";
readfile('sonuç.xml');
echo "</pre>\n";
} else {
echo "OLMADI, örnek.xml, örnek.xsl tarafından sonuç.xml dosyasına ";
echo "dönüştürülemedi. Bunun sebebi: " . xslt_error($xh) . " ve ";
echo "hata kodu: " . xslt_errno($xh);
}
xslt_free($xh);
?>
Bu önemli bir işlevsellik olsa da özellikle HTML sayfalarda sonuç doğrudan
gösterilmek istenir. Üçüncü değiştirgeye NULL
belirterek
XSLT dönüşüm sonucunun bir dosya yerine doğrudan işlevin
dönüş değeri olarak çıktılanmasını sağlayabilirsiniz.
Örnek 2 - Bir XML dosyayı bir XSLT dosya ile işleyip sonucu bir değişkene atamak
<?php
// Yeni bir XSLT işlemcisi ayıralım
$xh = xslt_create();
// Belgeyi dönüştürelim, sonucu $sonuç değişkeninde döndürelim
$sonuç = xslt_process($xh, 'örnek.xml', 'örnek.xsl');
if ($sonuç) {
echo "TAMAMDIR, örnek.xml, örnek.xsl tarafından dönüştürülüp \$sonuç ";
echo "değişkenine atandı. \$sonuç değişkeninin içeriği:\n<br />\n";
echo "<pre>\n";
echo $sonuç;
echo "</pre>\n";
} else {
echo "OLMADI, örnek.xml, örnek.xsl tarafından dönüştürülemedi. ";
echo "Bunun sebebi: " . xslt_error($xh) . " ve hata kodu: ";
echo "xslt_errno($xh);
}
xslt_free($xh);
?>
Yukarıdaki örneklerde, XSLT dönüşümünün en basit ve en çok kullanılan iki kullanımını gösterilmiştir. Ancak bazı durumlarda XML içeriğin ve XSLT kodunun bir veritabanı veya soket gibi harici kaynaklardan alınması gerekir. Bu gibi durumlarda, XML ve/veya XSLT verisini bir değişkene atamak zorunda kalabilirsiniz. Bu noktada XSLT'nin "değiştirge" sözdizimi imdada koşar. XML ve XSLT değiştirgelerinde dosya ismi yerine 5. değiştirgedeki dizinin anahtarları birer "yer tutucu" olarak belirtilir. Aşağıdaki örnekte bu durum örneklenmiştir.
Örnek 3 - Bir değişkendeki XML veriyi bir değişkendeki XSLT kodlarıyla işleyip sonucu bir değişkene atamak
<?php
// $xml ve $xsl, XML ve XSL veriyi içersin
$taşıyıcılar = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);
// Yeni bir XSLT işlemcisi ayıralım
$xh = xslt_create();
// Belgeyi dönüştürelim
$sonuç = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $taşıyıcılar);
if ($sonuç) {
echo "TAMAMDIR, örnek.xml, örnek.xsl tarafından dönüştürülüp \$sonuç ";
echo "değişkenine atandı. \$sonuç değişkeninin içeriği:\n<br />\n";
echo "<pre>\n";
echo $sonuç;
echo "</pre>\n";
} else {
echo "OLMADI, örnek.xml, örnek.xsl tarafından dönüştürülemedi. ";
echo "Bunun sebebi: " . xslt_error($xh) . " ve hata kodu: ";
echo "xslt_errno($xh);
}
xslt_free($xh);
?>
Örnek 4 - XSL dosyalara PHP değişkenlerinin aktarılması
<?php
// XML dizgesi
$xml = '<?xml version="1.0"?>
<para>
Beni dönüştür
</para>';
// XSL dizgesi
$xsl = '
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" indent="no"
omit-xml-declaration="yes" media-type="text/html"/>
<xsl:param name="myvar"/>
<xsl:param name="mynode"/>
<xsl:template match="/">
PHP değişkeni: <xsl:value-of select="$myvar"/><br />
Düğüm kümesi: <xsl:value-of select="$mynode"/>
</xsl:template>
</xsl:stylesheet>';
$xh = xslt_create();
// İkinci değiştirge bir dizge olarak yorumlanacak
$parameters = array (
'myvar' => 'test',
'mynode' => '<foo>bar</foo>'
);
$arguments = array (
'/_xml' => $xml,
'/_xsl' => $xsl
);
echo xslt_process($xh, 'arg:/_xml', 'arg:/_xsl',
NULL, $taşıyıcılar, $değiştirgeler);
?>
Yukarıdaki örneğin çıktısı:
PHP değişkeni: test<br> Düğüm kümesi: <foo>bar</foo>
Bilginize:
file:// şemasının Windows kullanırken dosya yolunun önünde gerekli oluşuna lütfen dikkat ediniz.