2011-03-11 53 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