jsoup 删除 div 与某个 class

jsoup remove div with a certain class

我在 jsoup 中有一个这样的列表:

Elements tbody = new Elements();

tbody 可能看起来像这样(---- 分隔 tbody 列表中的元素):

<td> 
 <div data-emission="56b2140adb6da7bf3cbf6228" class="mainCell"> 
  <a href="/tv/weather-country-12457/"> <span class="left">16:00</span> 
   <div> 
    <p>Weather - country</p> 
   </div> </a> 
 </div> 
 <div data-emission="56b2140adb6da7bf3cbf6237" class="mainCell shows pending"> 
  <a href="/shows/that's-70-show-550347/epi1201/"> <span class="left">16:10</span> 
   <div> 
    <p>That's 70 show</p> 
    <span class="info">epi. 1201, Show</span> 
   </div> <p class="onAir"> <span>Pending</span> <u></u> <u style="width: 5%"></u> </p> </a> 
 </div> </td>
 ---------------------------------------------------------------------------
 <td> 
 <div data-emission="56b23876db6da7bf3cbf6588" class="mainCell pending"> 
  <a href="/tv/weather-563806/"> <span class="left">16:10</span> 
   <div> 
    <p>Weather</p> 
   </div> <p class="onAir"> <span>Pending</span> <u></u> <u style="width: 51%"></u> </p> </a> 
 </div> 
 <div data-emission="56b23876db6da7bf3cbf6589" class="mainCell"> 
  <a href="/tv/animal-cops-2615/"> <span class="left">16:15</span> 
   <div> 
    <p>Animal Cops</p> 
    <span class="info">epi. 3079, Show</span> 
   </div> </a> 
 </div> 
 <div data-emission="56b23876db6da7bf3cbf658a" class="mainCell shows"> 
  <a href="/show/house-md-1601/odc137/"> <span class="left">16:30</span> 
   <div> 
    <p>House MD</p> 
    <span class="info">epi. 137, Show</span> 
   </div> </a> 
 </div> </td>
 ---------------------------------------------------------------------------
 <td> 
 <div data-emission="56b213b3db6da7bf3cbf61a1" class="mainCell movies pending"> 
  <a href="/movie/star-trek-564170/"> <span class="left">16:00</span> 
   <div> 
    <p>Star Trek</p> 
    <span class="info">Movie</span> 
    <span class="szh prem">| Premiere</span> 
   </div> <p class="onAir"> <span>Pending</span> <u></u> <u style="width: 21%"></u> </p> </a> 
 </div> </td>

我的目标是删除每个 movie/show 即 pending/onAir。所以在这个例子中我想摆脱整个 div 有:

f.e:

for(int i = 0; i < tbody.size(); i++){
            tbody.get(i).select("div").select("p").select(".onAir").remove();
        }

它只删除一个元素本身,而不是整个 div。我尝试了很多方法但没有成功。我将不胜感激任何帮助。

尝试以下代码片段。

Elements mainCells = tbody.select("div.mainCell");
for(int i = 0; i < mainCells.size(); i++){
    Elements mainCellsP = mainCells.get(i).select("div").select("a").select("p");
    if (mainCellsP.size() == 2) {
        // Remove this node from DOM tree
        mainCells.get(i).remove();
    }
}

首先select要删除的相应节点,然后调用该节点的remove()方法。

似乎待定节目也带有 pending css class。如果所有情况都是如此,您可以非常简单地通过以下方式完成:

doc.select("td>div.pending").remove();

这将从文档 doc 中删除所有带有 pending class 的 div 元素。如果它们是 td 元素的直接子元素。

或者,您可以使用您的方法并使用正确的 onAir class 和内部文本过滤 p 元素:

doc.select("td>div:has(p.onAir:contains(Pending))").remove();

查看 CSS selector syntax 了解 Jsoup 的强大功能。