检查domnodelist-> item(x) - > nodeValue ==" nbsp;"

时间:2014-10-28 20:11:24

标签: php dom xpath domdocument domxpath

我已登录并使用CURL抓取返回页面,将其加载DOMDocument,然后使用DOMXPATH进行查询(以查找' table.essgrid tr& #39)。 (我当时也在查询结果以查找孩子的结果,results->item(2)->nodeValue是日期或浏览器中的回声为 或{{1 }}。我需要检查它是否是非中断空格或实际文本。

希望通过以下代码有所帮助。

所以我希望这只能回应" table.essgrid> tr> td"它的值不是一个不间断的空间,但它只是在页面上回显:

$dom = new DOMDocument();
$dom->loadHTML($result);

$xpath = new DOMXPATH($dom);
$result = $xpath->query('//table[@class="essgrid"]//tr');
if($result->length > 0) {
    foreach($result as $item) {
        $tds = $item->getElementsByTagName('td');

        if($tds->length) {
            if($tds->item(2)->nodeValue != " " && $tds->item(2)->nodeValue != " ") {
                echo = '<div>not blank:</div>';
                echo = '<div>'.$tds->item(2)->nodeValue.'</div>';
            }
        }
    }
}

但它反映了所有结果,而不仅仅是有时间的结果。所以我认为我的问题是检查值是否= <div>not blank:</div> <div>&nbsp;</div> <div>not blank:</div> <div>&nbsp;</div> <div>not blank:</div> <div>13:00</div> <div>not blank:</div> <div>&nbsp;</div> <div>not blank:</div> <div>14:30</div> <div>not blank:</div> <div>13:00</div> <div>not blank:</div> <div>&nbsp;</div> ,但我所尝试的任何内容似乎都无效。

1 个答案:

答案 0 :(得分:5)

当您想要nodeValue作为&nbsp;进行比较时,您需要了解两件事:

  1. &nbsp;是一个表示特定字符​​的HTML实体,此处为非中断空格,可以正式指定为Unicode Character 'NO-BREAK SPACE' (U+00A0)
  2. DOMDocument 库在提供或接受字符串值时使用UTF-8作为字符编码。
  3. 掌握了这些一般信息,您可以轻松解决问题。由于&nbsp;代表 NO-BREAK SPACE(U + 00A0),因为DOMElement::nodeValue将内容返回为UTF-8编码字符串,而 NO-BREAK SPACE < / em> UTF-8在PHP中是"\xC2\xA0",你可以简单地比较它:

    /** @var $td DOMElement */
    $td = $tds->item(2);
    if ($td->nodeValue !== "\xC2\xA0") {
        // TD content is not "&nbsp;"
    }
    

    希望这能为您提供所需的指示。