Есть ли способ, чтобы превратить это прочь?
Нет, так как это нормальное поведение Jsoup HTML-парсера.
Или я делаю что-то не так?
Метод, вызываемый, возможно, является основной причиной всей проблемы.
Есть ли какие-либо причины, по которым они существуют?
Каждый раз, когда текст найден в HTML-документе, он представлен в виде TextNode
в окончательном HTML дереве объектов (Document
).
Если автор HTML-документа помещает разрыв строки перед элементом, Jsoup создаст TextNode для этого разрыва строки.
(...) ChildNodes(). Размер() больше не возвращает правильные данные
Я думаю, что суть проблемы здесь. Вместо вызова Node#childnodes()
вызовите метод Element#children()
. Этот метод будет отфильтровывать пустые TextNode
s для вас.
В качестве альтернативы, вы можете использовать следующий фрагмент код, чтобы получить данные:
Document doc = ...
Elements tds = doc.select("table tr > td");
if (tds.size() == 0) {
// No td found ...
}
// ...
Jsoup 1.8.2
ли это на самом деле вызывают никаких проблемы? Я предполагаю, что текстовые узлы не пусты, но они содержат пробелы и разрывы строк между фактическими элементами. – JonasCz
Да, я об этом не думал. Фактически они могут содержать их. Что касается проблем - они вызывают их из-за того, что childnodes(). Size() больше не возвращает правильные данные, и я также не могу просто проследить их вслепую, так как мне нужно проверить, является ли элемент фактическим или просто «пустым» TextNode , – NekoiNemo
Возможно, вы могли бы записать ошибку. Не должно быть слишком сложно прокручивать их и игнорировать пустые. – JonasCz