2012-01-18 3 views
2

私は、vrsion 1.2.0のStAXストリーミングAPIをhttp://stax.codehaus.org/から使用しています。 次のxmlをファイルに書き込もうとすると、char以上の文字はエスケープされません。しかし、エスケープに問題があるように見えるよりも少ないです。より大きい(>)のStAXエスケープ

out = new FileOutputStream("foo.xml"); 
XMLOutputFactory factory = XMLOutputFactory.newInstance(); 
XMLStreamWriter writer = factory.createXMLStreamWriter(out); 
writer.writeStartDocument(); 
writer.writeStartElement("foo"); 
writer.writeAttribute("test", "<foo>"); 
writer.writeEndElement(); 
writer.writeEndDocument(); 
writer.flush(); 
writer.close(); 
out.close(); 

出力は(該当する場合のみ)これです:

<foo test="&lt;foo>" 

私もwriteCharactersメソッドを使用しようとした - 同じ結果に。これはバグか意図ですか?回避策はありますか?あなたはをエスケープするを必要としないので(「&」で

replaceAll(">", "&gt;"); 

結果は、それ自体をエスケープ取得。事前に任意の助け

感謝をして、手動>置き換える。

答えて

7

することは基本的に、それはです>。すでに正しいことをしています。

+0

[link](http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/StAX4など)のような情報が不思議でした。 html)は、 writeCharacters(...)メソッドは、&、<, >、 "。"などの文字をエスケープするために使用されます。 – elyan

+0

@elyan:正直言って、それは単なる過度のドキュメントだと思われます。たぶんある時点で*(不必要に) '>'をエスケープしましたが、今はそうではありません。 –

+0

@elyan:仕様を確認したところ、エスケープする必要があるケースが1つあります。「右角括弧(>)は文字列「>」を使用して表すことができ、 ">"または文字列 "文字列"に "文字列がCDATAセクションの終わりをマークしていない場合、コンテンツ内に現れる場合は、文字参照を使用してエスケープしてください。" –

関連する問題