2011-03-11 35 views
2

我一直在嘗試使用DOM解析跨範圍類中的文本。這是我的代碼示例。使用DOM解析跨類文本PHP

$remote = "http://website.com/"; 
$doc = new DOMDocument(); 
@$doc->loadHTMLFile($remote); 
$xpath = new DOMXpath($doc); 
$node = $xpath->query('//span[@class="user"]'); 
echo $node; 

,這將返回下面的錯誤 - >「開捕致命錯誤:類的DOMNodeList的對象無法被轉換成字符串」。我很迷茫,我需要幫助!

我想要做的是解析用戶名在這個span標籤之間。

<span class="user">bballgod093</span> 

以下是遠程網站的完整源代碼。

<div id="randomwinner"> 
    <div id="rndmLeftCont"> 
     <h2 id="rndmTitle">Hourly Random <span>Winner</span></h2> 
    </div> 
    <div id="rndmRightCont"> 
     <div id="rndmClaimImg"> 
      <table cellspacing="0" cellpadding="0" width="200"> 
       <tbody> 
        <tr> 
         <td align="right" valign="middle"> 
         </td> 
        </tr> 
       </tbody> 
      </table> 
     </div> 
    <div id="rndmCaimTop"> 

    <span class="user">bballgod093</span>You've won 1000 SB</div> 

    <div id="rndmCaimBottom"> 
     <a id="rndmCaimBtn" class="btn1 btn2" href="/?cmd=cp-claim-random" rel="nofollow">Claim Bucks</a> 
    </div> 

    </div> 
    <div class="clear"></div> 
</div> 

回答

2

此調用

$node = $xpath->query('//span[@class="user"]'); 

不返回一個字符串,而是一個DOMNodeList

您可以在一定程度使用該列表像陣列(使用$node->length爲元素的數量和$node->item(0)拿到的第一個元素),以獲得DOMNode對象。每個這些對象都有一個nodeValue屬性,它是一個字符串。

所以,你會做這樣的事情

$node = $xpath->query('//span[@class="user"]'); 
if($node->length != 1) { 
    // error? 
} 

echo $node->item(0)->nodeValue; 

當然,對於$node改變變量名更合適的將是很好的東西。

+0

@ jennifer:對不起,我的錯。我糾正了答案。此外,它有多少實例你沒有任何區別。無論如何,訪問查詢結果的界面都是相同的。 – Jon 2011-03-11 13:03:02

+0

謝謝!我認爲它的工作,但頁面是空白,當我重新加載,但沒有文字 – jennifer 2011-03-11 13:11:30