2015-06-30 4 views
0

tag структура выглядит следующим образом:Удалить все элементы после данного тега

<div class="some-class"> 
    <h3>Foo</h3> 
    <p>...</p> 
    <p>...</p> 
    <h3>Bar</h3> 
    <p>...</p> 
    <p>...</p> 
    ... 

Теперь я хочу, чтобы удалить все элементы внутри тега some-class после того как я нашел h3 тег. Есть ли метод nextAll() в JSoup как есть для JavaScript?

Сейчас у меня есть

for (Element el : doc.select("div") { 
    if (el.className().equalsIgnoreCase("some-class") { 
    for (Element e : el.select("h3") { 
     if (e.hasText().equalsIgnoreCase("Bar") { 
     removeAllNextPTags(); 
     } 
    } 
    } 
} 

Любые идеи?

ответ

1

Есть метод nextAll() в JSoup

Вы можете использовать nextElementSibling() на элемент базы или nextElementSibling() на узле базы.

Я не совсем уверен, что, если я понимаю вас правильно, но вы хотите удалить все элементов после h3 или просто p-элементов (пока не появится другой h3 !?)?

Вот как удалить все р-элементов, начиная от h3 элемента с заданным текстом - пока другой h3 не найден:

public void removeChilds(Element root, String h3Text) 
{ 
    final Element h3Start = root.select("h3:contains(" + h3Text + ")").first(); 
    final int h3Idx = h3Start.siblingIndex(); 

    for(Element e : h3Start.siblingElements()) 
    { 
     // Skip all nodes before the relevant h3 element 
     if(e.siblingIndex() > h3Idx) 
     { 
      switch(e.tagName()) 
      { 
       case "p": 
        e.remove(); 
        break; 
       case "h3": 
        /* Stop if there's a h3 */ 
        return; 
       default: 
        /* Stop also if there's any non-p element!? */ 
        return; 
      } 
     } 
    } 
} 

Чтобы сделать это для всех h3 с данным текстом - например. несколько <h3>Foo</h3> -элементы с дочерними элементами - вы можете заменить first() на петлю над найденными элементами (вот что возвращает select()).

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