2011-04-28 82 views
1

我想解析所有腳本的src鏈接值,但我得到一個空數組。php xpath解析腳本src

$dom = new DOMDocument(); 
$file = @$dom->loadHTML($remote); 

$xpath = new DOMXpath($dom); 

$link = $xpath->query('//script[contains(@src, "pcode")]'); 

$return = array(); 
foreach($link as $links) { 
    $return[] = $links->nodeValue; 
} 
+0

沒有輸入樣本,這不是一個真正的問題。除此之外,如果這些'script'有'@ src'它們不應該有內容,那麼您使用的是錯誤的DOM方法。參見DOM級別3的['textContent'](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent)。 – 2011-04-28 16:03:15

+0

@Alejandro我不想要內容只是鏈接 – jack 2011-04-28 17:17:26

+0

如果通過「鏈接」,你的意思是'src'屬性,那麼你應該用'script/@ src [contains(。,「pcode」)]'來選擇它們。 – 2011-04-28 19:40:44

回答

2

你的XPath查詢看起來有效,應該抓住每一個<script>pcode屬性src

如果它返回一個空數組,有幾件事情要檢查:

確保DOM文檔和加載,加載到XPATH的時候有沒有錯誤。被抑制的DOM-> load可能會給出錯誤或警告。如果您在其他地方查詢並且工作正常,則忽略此操作。

確保文檔中的標籤是大小寫匹配的。

嘗試

$link = $xpath->query("//script[contains(@src, 'pcode')]"); 

似乎傻了,只是切換的引號,但你永遠不知道。

1

一定要檢查命名空間。如果您的HTML包含這樣

<html xmlns="http://www.w3.org/1999/xhtml"> 

聲明你需要與文檔

$xp = new domxpath($xml); 
$xp->registerNamespace('html', 'http://www.w3.org/1999/xhtml'); 

註冊的命名空間,尋找這樣的

$elements = $xp->query("//html:script", $xml); 

命名空間的元素,因爲偏執培育信心。