从单独的跨度中刮取一个数字

时间:2011-03-16 19:07:55

标签: php

我需要从这个html中删除号码622104

我如何获得该号码?

<div class="numbersBackground">
        <div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl00_numberPanel" class="number">
        <div class="numberWrapper"><span>6</span></div>
    </div><div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl01_numberPanel" class="number">
        <div class="numberWrapper"><span>2</span></div>
    </div><div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl02_numberPanel" class="number">
        <div class="numberWrapper"><span>2</span></div>
    </div><div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl03_commaPanel" class="comma">

    </div><div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl04_numberPanel" class="number">
        <div class="numberWrapper"><span>1</span></div>
    </div><div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl05_numberPanel" class="number">
        <div class="numberWrapper"><span>0</span></div>
    </div><div id="ctl00_mainContent_playersOnlineNumberRepeater_ctl06_numberPanel" class="number">
        <div class="numberWrapper"><span>4</span></div>
    </div>
</div>

1 个答案:

答案 0 :(得分:2)

使用DOMDocument类来解析HTML字符串,感谢其loadHTML方法,您可以使用XPath查询(使用DOMXpath类)查找具有<div>属性的所有class="numberWrapper"代码。

然后,迭代它们,将它们的内容连接到一个变量 - 在循环结束时,它将包含你的数字。


例如,您可以使用这种代码:

$str = <<<HTML
... HERE YOUR HTML ...
HTML;

$number = '';

$dom = new DOMDocument();
if ($dom->loadHTML($str)) {
    $xpath = new DOMXpath($dom);
    $results = $xpath->query('//div[@class="numberWrapper"]');
    foreach ($results as $div) {
        $number .= $div->nodeValue;
    }
}

var_dump($number);

而且,作为输出,你会得到:

string '622104' (length=6)


您还可以使用以下XPath查询,以确保您只使用<span>标记:

$results = $xpath->query('//div[@class="numberWrapper"]/span');

此处,由于<div>仅包含<span>,因此结果将相同 - 但在其他情况下可能会发生变化。


当然(只是为了确保说明):正则表达式不是从HTML字符串中提取信息的正确方法。



在评论后修改:

如果您不想考虑其他<div>,则必须找到另一个与您要提取的内容匹配的XPath查询。

例如,也许这样的事情可以解决问题:

$results = $xpath->query('//div[@class="numbersBackground"]//div[@class="numberWrapper"]/span');

当然,由您决定找出与您的HTML文档结构完全匹配的内容。


如果要下载HTML,则有两种解决方案:


作为旁注,如果您在HTML无效之前收到警告,则需要查看libxml_use_internal_errors()函数; - )