2011-01-27 7 views
6

Exmple alimentazione: view-source: http://rss.packetstormsecurity.org/files/tags/exploit/Partita testo con la sintassi XPath

voglio solo tornare sezioni del XML in cui il nodo titolo genitore ha corrispondenti testo in esso, in questo esempio il testo in modo che corrisponda è "sito" .

//get feed with curl 

$doc = new SimpleXmlElement($xml, LIBXML_NOCDATA); 

//$result = $doc->xpath('//title'); //this works returns all the <title>'s 

$result = $doc->xpath('//title[site]');      //doesn't work 
$result = $doc->xpath('//title[text()="site"]');   //doesn't work 
$result = $doc->xpath('//title[contains(site)]');   //doesn't work 
$result = $doc->xpath('//title[contains(text(),'Site')]'); //doesn't work 


foreach ($result as $title) 
echo "$title<br />" 

risposta

19

La chiamata è necessario è, credo, questo:

$result = $xpath->query('//title[contains(.,"Site")]'); 

Si noti che questo è case-sensitive.

Si noti che la funzione XPath contains accetta due argomenti: un pagliaio e un ago. In questo caso, stiamo usando il valore del testo del nodo corrente come il pagliaio, che è indicato dall'uso del punto (.).

+0

+1 Risposta corretta. Hai scritto * "stiamo usando il nodo corrente" *. Ma la funzione 'fn: contains()' prevede due argomenti di tipo stringa, quindi la sintassi abbreviata 'self :: node()' ('.') verrà castata con la funzione' fn: string() ', restituendo la sua stringa ** valore **: concatenazione di tutti i nodi di testo discendenti. –