2011-10-28 30 views
1

JSOUP(XMLファイル用のJavaツール)を使用しています。次のコードを使用して、XMLファイルに保存されているURLを読み取っています。ここに私のコードは次のとおりです。JSOUPでエスケープモードを無効にする方法を教えてください。

Document d = Jsoup.parse(new File("feed.xml"), null); 
Element elementCat = d.getElementsByTag("cat").get(0); 
String stringUrl = elementCat.ownText(); 
System.out.println(stringUrl); 

XML入力ファイルは、このようなものです:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<root> 
<cat>http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event&Lang=P</cat> 
</root> 

私の問題は、プログラムの出力はこうですということである:=これに代えてP http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event«: http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event&Lang=P

つまり、「& Lang」を自動的に「«」に変換します。 「⟪」ではないことに注意してください。ちょうど「& Lang」で、セミコロンはありません。 エンコードまたはエスケープを無効にしたい場合、生データを必要とします。

どうすればこの問題を解決できますか?

+2

jsoupはXMLの代わりにHTML用ではありませんか? –

+0

あなたは正しいと思います。しかし、JSOUPにはXMLを扱うための強力な機能があります。私はそれらを使用しないようにしたくありません。 – Soheil

答えて

3

あなたはXMLを持っています。 XMLでは、マークアップをエスケープする方法があります。<またはその値に"の属性を含むテキストが必要な場合があります。エスケープは、アンパサンドで始まり、その後にコードが続き、セミコロンで始まる文字エンティティ参照を使用して実行されます。ように:&lt;。それは<を表すことができます。

もちろん、アンパサンド自体の問題が残っています。実際に別の文字エンティティではなく、必要なアンパサンドの場合は、エンコードする必要があります。&amp;

あなたが持っているのは、整形式ではないXMLです。 &は、文字エンティティの参照を開始していることを示しますが、その後はLangとなります。さて、おそらくjsoupはこれの問題をあまりしないでしょう。しかし、それはXMLを解析するのではなくHTMLを解析するためです。 HTMLはXMLよりも寛大であるため、私はjsoupが他のものと未知の文字参照であるために必要なものを単純に切り詰めると考えます。おそらくnul文字です。

XMLが整形式であることを確認してください。それができない場合は、XMLとして扱いませんが、HTMLとして扱います。 XML処理があなたの目的であれば、SAX、StAX、DOMまたはJAXBを調べてください。

+0

Hoooray、私はそれを解決しました。 あなたは正しいです。私のXMLファイルは整形式ではありません。 私はhttp://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event&Lang=P whitを変更しました。http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event & Lang = P and it作業。 – Soheil

+0

整形式のXMLを入力として確実に得られる限り、jsoupを使用することで合理的に安全だと思います。 –

関連する問題