Я вошел в систему и взял страницу возврата с помощью CURL
, загрузил ее с помощью DOMDocument
и затем запросил ее с помощью DOMXPATH
(чтобы найти «table.essgrid tr»). (Затем я также запрашиваю результат, чтобы найти дочерние td и) с результатами, results->item(2)->nodeValue
– это либо дата, либо то, что эхо в браузере как
или , Мне нужно проверить, не будет ли это пробелом или фактическим текстом.
Надеюсь, это имеет смысл с помощью кода ниже.
$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>'; } } } }
Так что я хочу, чтобы это только эхо «table.essgrid> tr> td», у которого есть значение, которое не является незаменимым пространством, но оно просто перефразирует это на странице:
<div>not blank:</div> <div> </div> <div>not blank:</div> <div> </div> <div>not blank:</div> <div>13:00</div> <div>not blank:</div> <div> </div> <div>not blank:</div> <div>14:30</div> <div>not blank:</div> <div>13:00</div> <div>not blank:</div> <div> </div>
Но это отражает все результаты, а не только те, у кого есть время. Поэтому я думаю, что моя проблема заключается в проверке, если значение ==
, но я ничего не пробовал на своем месте, кажется, работает.
Когда вы хотите сравнить nodeValue
для того, чтобы быть
, вам нужно знать две вещи:
представляет собой объект HTML, который представляет конкретный символ, здесь неразрывное пространство, которое может быть формально определено как символ Unicode «NO-BREAK SPACE» (U + 00A0) . Имея эту общую информацию, вы можете легко решить свою проблему. Как
означает « NO-BREAK SPACE» (U + 00A0) и как DOMElement::nodeValue
возвращает содержимое как кодированную строку UTF-8, а как NO-BREAK SPACE в UTF-8 является "\xC2\xA0"
в PHP, вы можете просто сравнить его :
/** @var $td DOMElement */ $td = $tds->item(2); if ($td->nodeValue !== "\xC2\xA0") { // TD content is not " " }
Надеюсь, это даст вам нужные указатели.