2013-12-12 3 views
3

Я хочу удалить некоторые элементы (CSS-теги) в заголовке html-файла. Я пробовал так:Удаление элемента с помощью Jsoup не работает

Document doc = Jsoup.parse(htmlString); 
Element head = doc.head(); 
Elements headChildren = head.children(); 
for (Element el : headChildren) { 
    if (el.attr("type").contains("text/css") || el.attr("rel").contains("stylesheet")){ 
     Log.d("HTML", "elements-before: " + el.nodeName()); //Log prints 7 elments 
     el.remove(); 

    } 
} 

for (Element el : headChildren) { 
    if (el.attr("type").contains("text/css") || el.attr("rel").contains("stylesheet")){ 
     Log.d("HTML", "elements-after: " + el.nodeName()); //Log prints 7 elments again 
    } 
} 

Я действительно не знаю, где моя вина есть. Пожалуйста, помогите мне.

Заранее благодарим за любые советы!

ответ

3

Вы удаляете Element с объекта Document, где они находятся, а не Elements. Таким образом, когда вы печатаете каждый Element во второй раз, они все еще находятся в коллекции Elements, но не в Document.

Jsoup классы Element, Comment, Document и так далее все подклассы класса Node, который представляет собой узел в дереве DOM. Метод remove() является унаследованным методом класса Node и удаляет узел из дерева DOM.

+2

Doh! Я до сих пор не добрался туда. Отлично сработано. @OP: Просто сделайте 'headChildren = head.children();' еще раз перед вторым циклом, чтобы увидеть разницу. –

+0

Большое спасибо, господа! –

Смежные вопросы