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
有:
that's 70 show
weather
star trek
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 的强大功能。
我在 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
有:
that's 70 show
weather
star trek
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 的强大功能。