Note that this method does not provide any means to distinguish between a successful result that returns FALSE and an error.
For example, this will succeed and return FALSE:
<?php $xpath->evaluate("1 = 0"); ?>
One workaround when you know you are expecting a Boolean is to wrap the result with string(). e.g.
<?php $xpath->evaluate("string(1 = 0)"); ?>
This will return a string "false" on success, or the Boolean FALSE on error.
DOMXPath::evaluate
(PHP 5 >= 5.1.0)
DOMXPath::evaluate — Belirtilen XPath ifadesini çözümler ve mümkünse yazılı bir sonuç verir
Açıklama
ifade ile belirtilen XPath ifadesini çözümler ve
mümkünse yazılı bir sonuç verir.
Değiştirgeler
-
ifade -
Değerlenderelecek XPath ifadesi.
-
bağlamsal_düğüm -
Seçimlik olarak, göreli XPath sorguları yapmak içindir. Öntanımlı olarak sorgular kök elemana göre çözümlenir.
Dönen Değerler
Mümkünse sonucu bir dizge orarak döndürür, değilse belirtilen XPath ifadesi ile eşleşen tüm düğümleri içeren bir DOMNodeList nesnesi döner.
Örnekler
Örnek 1 - Tüm İngilizce kitapların sayısını döndürmek
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// sorgumuzu tbody düğümüne göre yapalım
$query = 'count(row/entry[. = "en"])';
$entries = $xpath->evaluate($query, $tbody);
echo "$entries İngilizce kitap var.\n";
?>
Yukarıdaki örneğin çıktısı:
2 İngilizce kitap var.
daniel at danielnorton dot com
25-Jun-2011 09:56
Damien Bezborodov
28-Mar-2011 06:13
If your expression returns a node set, you will get a DOMNodeList instead of a typed result. Instead, try modifying your expression from "//node[1]" to "string(//node[1])".
daniel ad demus dk
16-Jun-2008 03:02
It seems this method is only included from PHP 5.1.
yuriucsal at NOSPAM dot yahoo dot com dot br
06-Mar-2005 12:55
this class can substitute the method evaluate while it is not validated. Made for Yuri Bastos and Jo�o Gilberto Magalh�es.
<?php
class XPtahQuery
{
// function returns a DOMNodeList from a relative xPath
public static function selectNodes($pNode, $xPath)
{
$pos = strpos(self::getFullXpath($pNode),"/",1);
$xPathQuery = substr(self::getFullXpath($pNode),$pos);//to paste /#document[1]/
$xPathQueryFull = $xPathQuery. $xPath;
$domXPath = new DOMXPath($pNode->ownerDocument);
$rNodeList = $domXPath->query($xPathQueryFull);
return $rNodeList;
}
// function returns a DOMNode from a xPath from other DOMNode
public static function selectSingleNode($pNode, $xPath)
{
$pos = strpos(self::getFullXpath($pNode),"/",1);
$xPathQuery = substr(self::getFullXpath($pNode),$pos);//to paste /#document[1]/
$xPathQueryFull = $xPathQuery. $xPath;
$domXPath = new DOMXPath($pNode->ownerDocument);
$rNode = $domXPath->query($xPathQueryFull)->item(0);
return $rNode;
}
//utilitaries functions off selectSingleNode
private function getNodePos($pNode, $nodeName)
{
if($pNode == null)
{
return 0;
}
else
{
$var = 0;
if ($pNode->previousSibling != null)
{
if ($pNode->previousSibling->nodeName == $nodeName)
{
$var = 1;
}
}
return self::getNodePos($pNode->previousSibling, $nodeName) + $var;
}
}
//utilitaries functions off selectSingleNode
private function getFullXpath($pNode)
{
if($pNode == null)
{
return "";
}
else
{
return self::getFullXpath($pNode->parentNode) . "/" . $pNode->nodeName . "[" .strval(self::getNodePos($pNode, $pNode->nodeName)+1) . "]";//+1 to get the real xPath index
}
}
}
?>
