2016-08-17 2 views
0

Я работаю над проектом, и меня интересует только макет страницы, а не текст. В настоящее время у меня проблемы с удалением каждого элемента на уровне текста. например:Как удалить все элементы на уровне текста с помощью Jsoup?

<div> 
    <ul> 
     <li>some menu item</li> 
     <li>some menu item</li> 
     <li>some menu item</li> 
    </ul> 
</div> 
<div> 
    <h3>Tile of some text</h3> 
    <p></p> 
    <p>some text</p> 
    <ul> 
     <li>some other text</li> 
     <li>some other text</li> 
     <li>some other text</li> 
    </ul> 
</div> 

Я хочу, чтобы избавиться от уль, Li, р и h3 элементов на уровне текста, но сохранить DIV и список с пунктами меню, так как это является частью макета страницы , Как мне это сделать с Jsoup?

Я пытался сделать это с помощью document.select(), а затем .remove() элементов, но функция выбора не создана для таких нестандартных запросов.

EDIT: Конечный результат я хочу получить это:

<div> 
    <ul> 
     <li>some menu item</li> 
     <li>some menu item</li> 
     <li>some menu item</li> 
    </ul> 
</div> 
<div> 

</div> 

Как вы можете видеть, что это удаляет список, когда уль тег находится на том же уровне, что и метки с текстом в них. Тег ul является частью текста, который находится на странице и не имеет ничего общего с макетом страницы. Значок ul с элементами меню важен для страницы, так как это определяет, есть ли там меню и имеет 3 разных элемента.

+0

Можете ли вы привести пример того, как HTML должен выглядеть, после модификации? – CanB

ответ

0

Вначале я нашел теги, от которых хочу избавиться, а затем вызывается empty() на их родителя.

public static void main(String[] args) { 
     String html = "<div> <ul> <li>some menu item</li> <li>some menu item</li> <li>some menu item</li> </ul></div><div> <h3>Tile of some text</h3> <p></p> <p>some text</p> <ul> <li>some other text</li> <li>some other text</li> <li>some other text</li> </ul></div>"; 
     Document doc = Jsoup.parse(html.toString()); 
     Elements elements = doc.body().select("*"); 
     for (Element element : elements) { 
      if ("h3".equals(element.tagName()) || "p".equals(element.tagName())) { 
       element.parent().empty(); 
      } 
     } 
     System.out.println(doc.toString()); 
    } 
+0

ОК, проверьте мой отредактированный ответ. – CanB

+0

Есть ли более чистый способ поиска по элементам текста? Мне не нравится внешний вид всех этих имен тегов в моей инструкции if. – k0enf0rNL

0

Вы можете выбрать и удалить все p, li и ul элементы со стандартными:

for (Element element : doc.select("p")) { 
    element.remove(); 
}