2016-12-16 36 views
1

以下の単純化の例を見てください:jsoupの特殊文字の変換を防ぐにはどうすればいいですか?

public static void main(String[] args) { 
     String html = "<html>\n" + 
        " <head></head>\n" + 
        " <body>\n" + 
        " <div> \n" + 
        " <p> 2 <= X </p> \n" + 
        " </div>\n" + 
        " </body>\n" + 
        "</html>"; 
     Document doc = Jsoup.parse(html);      
     System.out.println(doc.select("p").outerHtml()); 
    } 

これは<p> 2 &lt;= X </p>出力しますが、私はそれがあったように、選択したHTML部分をプリントアウトすることを期待しています:<p> 2 <= X </p>。 jsoupに '<'のシンボルを変換しないように指示するにはどうすればよいですか?

+1

あなたの入力が有効なHTMLではありません。 Jsoupはあなたのためにそれをエスケープするのは間違いありません。 –

+0

私は入力を制御できません。 jsoupにhtmlの妥当性を無視し、文書をパーズするように指示する方法はありますか? – RedSea

答えて

2

jsoupを使用することができます。

jSoup 1.8.3では、元のhtmlを保持するメソッドParser.unescapeEntitiesを使用することができます。

import org.jsoup.parser.Parser; 
... 
String html = Parser.unescapeEntities(original_html, false)); 

一部の以前のリリースでは、この方法は存在しませんでした。

は、あなたがこのためにはApache CommonsのStringEscapeUtils.unescapeHtml4()を使用することができthis link.

+0

ありがとうございます。それがトリックでした。しかし、第2のブーリアンパラメータは何ですか? – RedSea

+0

trueまたはfalseに設定すると違いはありませんか? – RedSea

+0

@RedSea - boolean paramの詳細をご覧くださいhttps://jsoup.org/apidocs/org/jsoup/parser/Parser.html#unescapeEntities-java.lang.String-boolean- – nullpointer

関連する問題