(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DOMXPath::registerPhpFunctions — PHP işlevlerini XPath ifadelerinde kullanılabilir yapar
Bu yöntem PHP işlevlerinin XPath ifadelerinde kullanılabilme yeteneğini etkinleştirir.
sınırla
XPath ifadelerinde kullanmak üzere sadece belli işlevlere izin vermek için kullanılır.
Ya bir dizge (işlev ismi) ya da işlev isimlerini içeren bir dizi olabilir.
Hiçbir değer dönmez.
Bu örneklerde aşağıda içeriği verlen book.xml dosyası kullanılmıştır:
Örnek 1 book.xml
<?xml version="1.0" encoding="UTF-8"?> <books> <book> <title>PHP Basics</title> <author>Jim Smith</author> <author>Jane Smith</author> </book> <book> <title>PHP Secrets</title> <author>Jenny Smythe</author> </book> <book> <title>XML basics</title> <author>Joe Black</author> </book> </books>
Örnek 2 - DOMXPath::registerPHPFunctions() ve php:functionString
kullanımı
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// php: isim alanını tanıt (gerekli)
$xpath->registerNamespace("php", "http://php.net/xpath");
// PHP işlevlerini tanıt (sınırlama yok)
$xpath->registerPHPFunctions();
// substr işlevini book/title üzerinde kullan
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');
echo "'PHP' ile başlayan {$nodes->length} kitap bulundu:\n";
foreach ($nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo "$author tarafından yazılan '$title'\n";
}
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
'PHP' ile başlayan 2 kitap bulundu: Jim Smith tarafından yazılan 'PHP Basics' Jenny Smythe tarafından yazılan 'PHP Secrets'
Örnek 3 - DOMXPath::registerPHPFunctions() ve php:function
kullanımı
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// php: isim alanını tanıt (gerekli)
$xpath->registerNamespace("php", "http://php.net/xpath");
// PHP işlevlerini tanıt (sadece birden_fazla işlevi)
$xpath->registerPHPFunctions("birden_fazla");
function birden_fazla($nodes) {
// Bir yazardan fazla varsa true dönsün
return count($nodes) > 1;
}
// Birden fazla yazarlı kitapları ayır
$books = $xpath->query('//book[php:function("birden_fazla", author)]');
echo "Birden fazla yazarlı kitaplar:\n";
foreach ($books as $book) {
echo $book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
Birden fazla yazarlı kitaplar: PHP Basics