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="<foo>"
私もwriteCharactersメソッドを使用しようとした - 同じ結果に。これはバグか意図ですか?回避策はありますか?あなたはをエスケープするを必要としないので(「&」で
replaceAll(">", ">");
結果は、それ自体をエスケープ取得。事前に任意の助け
感謝をして、手動>置き換える。
[link](http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/StAX4など)のような情報が不思議でした。 html)は、 writeCharacters(...)メソッドは、&、<, >、 "。"などの文字をエスケープするために使用されます。 – elyan
@elyan:正直言って、それは単なる過度のドキュメントだと思われます。たぶんある時点で*(不必要に) '>'をエスケープしましたが、今はそうではありません。 –
@elyan:仕様を確認したところ、エスケープする必要があるケースが1つあります。「右角括弧(>)は文字列「>」を使用して表すことができ、 ">"または文字列 "文字列"に "文字列がCDATAセクションの終わりをマークしていない場合、コンテンツ内に現れる場合は、文字参照を使用してエスケープしてください。" –