DOMXPath sorgusu ile çok uzun xpath / dönüş yok değerlendirmek

0 Cevap php

I am using PHP to retrieve content for a given URL and XPATH. I use DOMDocument / DOMXPath (with query or evaluate).

Küçük XPath için, ben doğru sonucu elde, ama uzun XPath için, çalışmıyor. ) (Ve bu xpath iyi görünüyor (I Xpather (firefox eklentisi ile elde edilen) ve YQL ile bunları yeniden test edin.

Bu meraklı sorun üzerinde herhangi bir tavsiye var mı?

Kod Örnek:

$doc = new DOMDocument();
$myXMLString = file_get_contents('http://stackoverflow.com/questions/4097230/too-long-xpath-with-domxpath-query-evaluate-return-nothing');
@$doc->loadHTML($myXMLString); //@ to suppress warnings 
                               //(good for not ending markup)
$xpath = new DOMXPath($doc);

$fullPath ="/html/body/small/path"; //it works
//$fullPath = "/html/body/full/path/with/lot/of/markup";//does not works
$entries = $xpath->query($fullPath);
//or ->evalutate($fullPath) (same behaviour)
//$entries return DOMNodeList (empty for a long path query, 
//                             correct for a small path query)

Ben özellik kısıtlama ile sınamak, ama (daha fazla çalıştığını yok artık ile çalışır küçük XPath ile) değiştirmek değil gibi görünüyor

Example : for this current page:

$fullPath = "/html
              /body
               /div[4]
                /div[@id='content']
                 /div[@id='question-header']
                  /h1
                   /a";//works (retrieve the question title)
$fullPath = "/html
              /body
               /div[4]
                /div[@id='content']
                 /div[@id='mainbar']
                  /div[@id='question']
                   /table
                    /tbody
                     /tr[2]
                      /td[2]
                       /div[@id='comments-4097230']
                        /table
                         /tbody
                          /tr[@id='comment-4408626']
                           /td[2]
                            /div
                             /a"; //does'nt work 
                                  //(should retrieve 'gaby' from comment)

Edit:

Ben SimpleXML lib ile test ve ben (küçük sorgu, uzun bir sorgu için hiçbir şey için iyi sonuç) tam olarak aynı davranışı var.


Edit 2:

I also cut the longest xpath by deleting some first element and it works. BTW I really do not understand why a full correct xpath does not work.

0 Cevap