2012-07-19 145 views
1

我有一個php腳本登錄到一個網站,然後我試圖運行一個xpath查詢來獲取某個標籤。如果我在本地保存頁面並運行xpath,那麼一切都很好;但是,當我登錄到網站並運行xpath時,它只會返回標記底部的html註釋。所以 - 如果我有:xpath只在標籤內抓取HTML註釋

<html> 
    <body> 
     something here 
     <!--comment here--> 
    </body> 
</html> 

我點我的XPath查詢時// HTML /體,只會返回「的評論在這裏」,別無其他。

我很困惑,從來沒有見過這樣的東西 - 任何想法?

編輯:這裏的捲曲登錄後我的PHP(這是成功的) - 這是相當標準:

$file = REDACTED; 
$doc = new DOMDocument(); 
$doc->loadHTMLFile($file); 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query("//html/body/div[1]"); 

if (!is_null($elements)) { 
    foreach ($elements as $element) { 
    $nodes = $element->childNodes; 
    foreach ($nodes as $node) { 
     $out = $node->nodeValue; 
    } 
    } 
} 

echo $out; 
+0

你需要顯示你的PHP代碼。 – nickb 2012-07-19 18:18:56

+0

我編輯了原帖! – user453289 2012-07-19 20:24:11

回答

1

你錯誤地保存您的節點:

$out = ''; 
foreach ($elements as $element) { 
    foreach ($element->childNodes as $node) { 
     $out .= $doc->saveHTML($node); 
    } 
} 

你原來的問題是這樣的:

$out = $node->nodeValue; 

其中$out在每次迭代中都被覆蓋,所以喲你只會得到最後的價值。上面的解決方案連續地連接節點的值,所以你會得到所有的。

0

XPath 2.0提供comment()函數用於訪問XML文件中的註釋。只需將此函數附加到要從中提取註釋的節點即可。

對於下面輸入XML片段

<html> 
    <body> 
     something here 
     <!--comment here--> 
    </body> 
</html> 

的XPath看起來像

/html/body/comment() 

這應該給你拿文本comment here。 欲瞭解更多信息,請參閱this