2016-05-31 9 views
0

私はJsoup 1.9.2を使用して、特定のタグのXML入力を処理し、クリーンアップしています。この間、私は、titleタグをきれいにするように頼まれたときにJsoupが奇妙に動作することに気付きました。具体的には、titleタグ内の他のXMLタグは削除されず、エスケープされたフォームに置き換えられます。Jsoupクリーンタイトルタグのエラー

私は以下のようにこれについて短いユニットテストを作成しました。テストは失敗します.の値はCuCl<sub>2</sub>です。

@Test 
public void stripXmlSubInTitle() { 
    final String input = "<title>CuCl<sub>2</sub></title>"; 
    final String output = Jsoup.clean(input, Whitelist.none()); 
    assertEquals("CuCl2", output); 
} 

titleタグが他のタグ(例えば、pまたはdiv)に置き換えている場合は、予想通り、その後、すべてが動作します。すべての説明と回避策が理解できます。

+0

http://stackoverflow.com/questions/8683018/jsoup-clean-without-adding-html-entities – maztt

答えて

0

titleタグはhead(またはhtmlのHTML5)タグ内で使用する必要があります。ほとんどの場合、ブラウザのウィンドウ/タブにHTMLドキュメントのタイトルを表示するために使用されるため、子タグを持つことは想定されていません。

JSoupはpまたはdivのような実際のコンテンツタグとは異なりますが、textareaについても同様です。

編集:戻ってくる

public static void main(String[] args) { 
    try { 
     final String input = "<content><title>CuCl<sub>2</sub></title><othertag>blabla</othertag><title>title with no subtags</title></content>"; 
     Document document = Jsoup.parse(input); 
     Elements titles = document.getElementsByTag("title"); 
     for (Element element : titles) { 
      element.text(Jsoup.clean(element.ownText(), Whitelist.none())); 
     } 
     System.out.println(document.body().toString()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

:あなたはこのような何か行うことができます

あなたのニーズに応じて

<body> 
<content> 
    <title>CuCl2</title> 
    <othertag> 
    blabla 
    </othertag> 
    <title>title with no subtags</title> 
</content> 
</body> 

を、いくつかの調整は、例えば、なされる必要があります

返します
System.out.println(Jsoup.clean(document.body().toString(), Whitelist.none())); 

CuCl2 blabla title with no subtags 
+0

ありがとう!私の文書は純粋なHTMLではありませんが、HTMLタグ付きのXMLです。あなたはこれを避ける方法を推奨することができます(正規表現の置き換え以外)?私はJsoupのホワイトリストビットが好きです。 – Claudiu