Jsoupはすべてのテキストを要素の間に\ r \ nを含むテキストノードとして保存します。私はページ上のすべての実際のテキストを選択し、その親を選択して、その親のすべてのテキストを削除したいと思います。Jsoupを使用して実際のテキストを含むすべての要素を選択する方法は?
document.select("*:containsOwn(\n)").remove();
for(int i = 1; i < document.size(); i++){
if(document.get(i).hasText()){
List<Element> removableElements = document.get(i).parent().getAllElements();
for (Element e1 : removableElements) {
e1.remove();
}
}
}
それはすべてtextnodesが\ n個含むので、これはこれでtextnodesを持つ最初の要素であるとして、それは身体を削除しようとすると削除されません:
は、私は現在、これを持っています。
すべての要素をテキストで選択したいだけです。 element.parent()。children()。remove();
document.select("*:contains()");
も私が望むように動作しません。
この質問はthis質問に関連していますが、同じではありません。
EDIT:
入力:
<div>
<ul>
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
</ul>
</div>
<div>
<h3>Tile of some text</h3>
<p></p>
<p>some text</p>
<ul>
<li>some other text</li>
<li>some other text</li>
<li>some other text</li>
</ul>
</div>
出力:
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
<h3>Tile of some text</h3>
<p></p>
<p>some text</p>
<li>some other text</li>
<li>some other text</li>
<li>some other text</li>
あなたはANを追加することができます入力と期待される出力の例? – TDG
出力の「
」は、「実際のテキストを含む」ルールと矛盾します。これは、特別なケース「空のpタグ」を許可しなければならないことを意味します。これはたぶん複雑なWebサイトの例に過ぎないため、特別なケースがたくさんあります。テキストレベルの要素http: /stackoverflow.com/a/7130146/1661938関連する/リンクされた質問にも同様の問題が存在します。一般的な解決方法が必要ですが、特別な場合があります。たぶん、あなたのアプローチを考え直すか、ターゲットを説明するのにもっと詳しく説明する必要があります(たとえば、メニューは常に同じですか?)。 –