2011-01-27 34 views
6

exmple thức ăn chăn nuôi: view-source: http://rss.packetstormsecurity.org/files/tags/exploit/văn bản trận đấu với cú pháp XPath

Tôi chỉ muốn trở lại các phần của xml nơi nút tiêu đề phụ huynh đã phù hợp với văn bản trong đó, trong ví dụ này các văn bản để phù hợp là "trang web" .

//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 />" 

Trả lời

19

Cuộc gọi gì bạn cần là, tôi nghĩ rằng, điều này:

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

Lưu ý rằng đây là trường hợp nhạy cảm.

Lưu ý rằng chức năng XPath contains có hai đối số: một đống cỏ khô và một cây kim. Trong trường hợp này, chúng tôi đang sử dụng giá trị văn bản của nút hiện tại là haystack, được chỉ định bằng cách sử dụng dấu chấm (.).

+0

+1 Câu trả lời đúng. Bạn đã viết * "chúng tôi đang sử dụng nút hiện tại" *. Nhưng hàm 'fn: contains()' mong đợi hai đối số kiểu dữ liệu chuỗi, vì vậy cú pháp viết tắt 'self :: node()' ('.') sẽ được đúc bằng hàm' fn: string() ', trả về chuỗi ** value **: nối tất cả các nút văn bản con cháu. –

Các vấn đề liên quan