JSOUP: разрешить только теги изображений

#jsoup

#jsoup

Вопрос:

Я хотел бы получить помощь в JSOUP, чтобы разрешить только теги изображений.

Моя строка выглядит так:

 <p>some text here</p>
<p>some text here</p> 
<p><img alt="alt" src="http://www.example.com/image.jpg" /></p>
<p><img alt="alt" src="http://www.example.com/image.jpg" /></p> 
<p>some text here</p>
  

используя этот код в JSOUP, мне удается получить следующее:

 Whitelist customwhitelist1 = new Whitelist();
customwhitelist1.addAttributes("img", "src", "alt");
String final = Jsoup.clean(unsafe, customwhitelist1);

some text heresome text here
<img alt="alt" src="http://www.example.com/image.jpg" />
<img alt="alt" src="http://www.example.com/image.jpg" />
some text here
  

но мой конечный результат должен быть

 <img alt="alt" src="http://www.example.com/image.jpg" />
<img alt="alt" src="http://www.example.com/image.jpg" />
  

есть предложения? Спасибо

Комментарии:

1. Вы хотите выбрать <img> теги и записать их?

Ответ №1:

Если вам нужны только теги img в документе, вам не нужно использовать белый список. Вместо этого вы могли бы сделать что-то вроде

 doc.html(doc.select("img").toString());
  

Также, если вы хотите, чтобы тело документа содержало только теги img, сделайте следующее

 doc.body().html(doc.select("img").toString());
  

Ответ №2:

При очистке с помощью JSoup это не удаляет InnerText значение, поэтому, чтобы получить желаемый результат, вам придется удалить <p> теги перед запуском очистки.

Сначала вам нужно будет удалить <p> теги с текстом, и поскольку в них нет дочерних узлов, вы можете удалить их, выбрав из этого.

 //Select all the p-tags, if they have a zero size list of children, remove them
Document doc =  Jsoup.parse(html);
for (Element e : doc.select("p")) {
    if(e.children().size() == 0){
        e.remove();
    }
}
  

После этого очистите свой документ!

 String final = Jsoup.clean(doc.body().html(), customwhitelist1);
  

Комментарии:

1. ваш код также удаляет изображения, поскольку они также включены в теги <p>.

2. Верно! Мне нужно будет посмотреть на это немного дальше!