У меня есть PHP-скрипт, который анализирует веб-страницу и перемещается по ней с помощью библиотек DOMDocument и DOMXpath. Вэнь Бег $tr->ChildNodes->length
чтобы получить 3 <td>
, инструкция возвращает 6, где 0 возвращает первое <td>
1 — пустая строка (19), 2 — вторая <td>
, 3 снова пустая строка (19), 4 третья <td>
, 5 — это еще раз, когда пустая строка (19), а 6 — весь HTML-код страницы. (проверено с использованием $dom->saveHTML($tr->childNodes->item(0)
так далее.)
Как я могу сделать ->length
вернуть правильный номер? Почему это ведет себя так странно?
<tr>
<td>
<span>...</span>
</td>
<td>
<a href="..."><img ...></a>
</td>
<td>
<div>
<span>
<a href="...">...</a>
<br>
<ahref="...">...</a>
</span>
<span>...</span>
<br><br>
<a href="...">...</a>, <a href="...">...</a>
</div>
<div>
<a href="...">...</a> | <a href="...">...</a>
</div>
</td>
</tr>
Обратите внимание, что я пропустил некоторые атрибуты, такие как стиль, класс, данные и т. Д.
Такое поведение не совсем «странно». В DOM разрывы строк фактически обрабатываются как пустые узлы. Чтобы получить «правильное» число дочерних элементов, вы должны либо удалить разрывы строк из документа, который вы пытаетесь предварительно проанализировать, либо получить все дочерние элементы и удалить пустые элементы из этого списка узлов.
Других решений пока нет …