JSOUP - Доступ к элементам внутри класса div / stop при достижении определенного класса div - PullRequest
0 голосов
/ 29 июня 2018

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

<h1>Latest Deals</h1>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n
<div class=\"breadcrumb-wrapper\">\r\n    
<ul class=\"breadcrumb\">\r\n        
<li><a href=\"/Home\">Home</a></li>\r\n        
<li><a href=\"/Deals\">Deals</a></li>\r\n        
<li class=\"active\">Mau Mudik Hemat? Nikmati Diskon Hingga 20%</li>\r\n 
</ul>\r\n</div>\r\n\r\n
<div class=\"article outer clearfix\">\r\n    
<div class=\"col-sm-12\">\r\n        
<img alt=\"Mau Mudik Hemat? Nikmati Diskon Hingga 20%\" title=\"Mau Mudik Hemat? Nikmati Diskon Hingga 20%\" src=\"/images/slider/id/special-raya-offer-id-v2.jpg\">\r\n        
<h1>Mau Mudik Hemat? Nikmati Diskon Hingga 20%</h1>\r\n        
<p class=\"date\">May 18th, 2018</p>\r\n        
<p><strong class=\"text-red\"></strong></p>\r\n\r\n        
<p>This is the first paragraph</p>\r\n\r\n        
<p>This is the second paragraph.</p>\r\n\r\n        
<p>This is the third paragraph</p>\r\n\r\n        
<p>Below is the point form start:</p>\r\n\r\n        
<ol>\r\n            
<li>Point form A</li>\r\n            
<li>Point form B</li>\r\n            
<li>Point form C</li>\r\n            
<li>Point form D</li>\r\n            
</ol>\r\n\r\n\r\n\r\n        
<div class=\"m-top30 m-bottom20\">\r\n    
<a href=\"/home\" class=\"btn btn-lg btn-orange\">Home</a>\r\n\r\n    \r\n\r\n\r\n</div>\r\n\r\n\r\n

Ранее я успешно получил желаемый контент через:

Document doc = Jsoup.parse(content);
Element eTitle = doc.getElementsByTag("h1").get(1);
Elements eBody = doc.getElementsByTag("p");

for (Element body : eBody) {
   detailContent += "<p>" + body.html() + "</p>";

Код выше я получил первый "h1" и все элементы с "p" из моего длинного HTML-кода. Тем не менее, теперь в некоторых случаях у меня может быть элемент «ол» между этими «р». Например:

<div class=\"col-sm-12\">\r\n <img alt=\"abc\" title=\"abcd\" src=\"/images/slider/id/abcd.jpg\">\r\n 
<h1>This is the header</h1>\r\n
<p class=\"date\">November 4th, 2015</p>\r\n 
<p><strong class=\"text-red\">Sorry, this promotion has expired.</strong></p>\r\n  
<p> Paragraph 1 </p>\r\n
<p> Paragraph 2 </p>\r\n
<ol>\r\n            
<li> Point 1 </li>\r\n            
<li> Point 2 </li>\r\n            
</ol>\r\n
<p> Paragraph 3 </p>\r\n
<p> Paragraph 4 </p>\r\n
<ol>\r\n            
<li> Point 1 </li>\r\n            
<li> Point 2 </li>\r\n            
</ol>\r\n
<div class=\"m-top30 m-bottom20\">

Как мне создать свой код, чтобы получить все эти элементы?
* P.s Все, что я хочу сделать, это
1) Получить элемент в "col-sm-12" div / последний элемент перед "m-top30 m-bottom20"
2) Игнорировать определенный элемент, содержащийся в "col-sm-12"

1 Ответ

0 голосов
/ 29 июня 2018

Смена селекторов на CSS и добавление фильтра, такого как «p» под первым div, может вам помочь. Однако из приведенного выше html не ясно, заканчивается ли первый div перед началом второго div. Если вы поделитесь более подробной информацией о HTML, может быть, мы можем уточнить селекторы. Я высказал свои предположения / мое понимание в комментарии к коду.

    String eTitle = doc.select("div.col-sm-12 > h1").text(); //I'm assuming you are trying to fetch the title text. 

    Elements eBody = doc.select("div.col-sm-12 > p , ol"); //This CSS selector will limit the 'p' elements to this div alone. 

    for (Element body : eBody) {
      //work with the 'body' element here.
...