Избавление от html-атрибутов и их значений при разборе с помощью jsoup - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь проанализировать несколько HTML-документов таким образом, чтобы получить только теги, отбрасывающие все его атрибуты и значения. Может кто-нибудь помочь мне, пожалуйста.

Например: <img src="pic_trulli.jpg" alt="Italian Trulli">

изменяется на

<img>

Точно так же я хочу, чтобы это работало для всех тегов в документе HTML.

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Чтобы удалить атрибуты одного элемента, вы можете использовать это:

element.attributes().asList()
        .stream().map(Attribute::getKey)
        .forEach(element::removeAttr);

Чтобы удалить атрибуты всех элементов, вы можете использовать это в сочетании с document.getAllElements():

Document document = Jsoup.parse("<img src=\"pic_trulli.jpg\" alt=\"Italian Trulli\">");
document.getAllElements()
        .forEach(e -> e.attributes().asList()
                .stream().map(Attribute::getKey)
                .forEach(e::removeAttr));

Результат будет таким:

<html>
 <head></head>
 <body>
  <img>
 </body>
</html>
0 голосов
/ 29 апреля 2019

Если ваша цель - получить четкую структуру документа, вам также необходимо удалить узлы текста и данных. Рассмотрим следующий фрагмент.

Document document = Jsoup.connect("http://example.com").get();
document.getAllElements().forEach(element -> {
      element.attributes().asList().forEach(attr -> element.removeAttr(attr.getKey()));
      element.textNodes().forEach(Node::remove);
      element.dataNodes().forEach(Node::remove);
    });
System.out.println(document);

Выход:

<!doctype html>
<html>
 <head>
  <title></title>
  <meta>
  <meta>
  <meta>
  <style></style>
 </head>
 <body>
  <div>
   <h1></h1>
   <p></p>
   <p><a></a></p>
  </div>
 </body>
</html>
0 голосов
/ 29 апреля 2019

Вы можете выполнять итерации по всем элементам из документа, а затем по атрибутам каждого элемента, что должно позволить вам удалить их.

Демо:

String html = "<img src=\"pic_trulli.jpg\" alt=\"Italian Trulli\">" +
        "<div class=\"foo\"><a href=\"pic_trulli.jpg\" alt=\"Italian Trulli\" non-standard></div>";
Document doc = Jsoup.parse(html);

System.out.println(doc);
for (Element el : doc.getAllElements()){
    for (Attribute atr : el.attributes().asList()){
        el.removeAttr(atr.getKey());
    }
}
System.out.println("-----");
System.out.println(doc);

Вывод:

<html>
 <head></head>
 <body>
  <img src="pic_trulli.jpg" alt="Italian Trulli">
  <div class="foo">
   <a href="pic_trulli.jpg" alt="Italian Trulli" non-standard></a>
  </div>
 </body>
</html>
-----
<html>
 <head></head>
 <body>
  <img>
  <div>
   <a></a>
  </div>
 </body>
</html>
...