2017-05-25 110 views
0

我一直在研究一些涉及xPaths和從其他網站檢索元素的實踐應用程序。DomxPath查詢不返回節點列表

我使用了DomXpath,但它沒有返回結果或節點列表。

下面的代碼:

$DOM = new DOMDocument(); 
@$DOM->loadHTML($html); 
$xpath = new DOMXPath($DOM); 
$nodes = $xpath->query("//span[contains(@style,'font-size:25px;')]"); 
foreach ($nodes as $node) { 
    echo $node->nodeValue; 
} 

的例子的網頁源代碼:

<div class="front-view-content full-post"> 
    <p> 
     <span style="font-size:25px; color:#98293D;">RED</span><br> 
     <span style="font-size:25px; color:#98293D;">BLUE</span><br> 
     <span style="font-size:25px; color:#98293D;">WHITE</span></p> 
    </div> 

它不返回任何東西只是一個普通的空白。

回答

0

沒有分號;在源代碼中,xpath不匹配。

$nodes = $finder->query('//span[@style="font-size:25px"]'); 

應工作

+0

查看更新後的示例並不好用 –

+1

xpath查詢中的樣式應該與html代碼中的樣式完全匹配。 –

0

,嘗試匹配包含特定值是有點不止做[@style="your search string"]更復雜的屬性,完全匹配your search string這隻會匹配style屬性。

據我所知有XPath中沒有速記選擇,類似於CSS的實例中的,它允許你做[@style*="your search string"][@style~="your search string"]

要測試一個字符串包含另一個字符串,您使用contains()功能。你比如然後XPath查詢都必須轉化爲:

//span[contains(@style,"font-size:25px;")]

要知道,雖然匹配隔離字符串,在如果你願意,這個詞邊界(如class="nav main"main匹配,但例如不在class="nav maintenance"中),仍然會變得更復雜一些。我會參考to this answer這個例子。

+0

它也不工作。我得到一個空白頁面的結果。我已經使用了你建議的xpath查詢 –

+0

@GerardSantos然後,你應該刪除'$ DOM-> loadHTML($ html);'前面的'@',讓PHP顯示你的實際錯誤,而不是因爲如果你顯示的HTML只是一個有效的HTML大頁面的片段,它應該工作得很好,因爲我剛剛測試過它。如果你不確定如何用'DOMDocument'成功加載可能無效的HTML,我建議你問一個新的問題或者搜索StackOverflow;也許這樣的問題已經得到解答。 –