2012-01-20 7 views
0

xstreamはxmlからJavaオブジェクトに変換するときに&&に変換しています。 私はこれが起こらないようにしています。どうすればいい?xstreamはxmlからJavaオブジェクトに変換するときに&に変換します

XStream xstream = new XStream(new DomDriver()); 

      xstream.processAnnotations(HelpConfigVO.class); 
      xstream.processAnnotations(ProductVO.class); 
      xstream.processAnnotations(PackageVO.class); 
      xstream.addImplicitCollection(HelpConfigVO.class, "packages"); 
      configVO = (HelpConfigVO)xstream.fromXML(helpConfigData); 

第2に、xstreamから取得している出力XMLはフォーマットされていません。 xmlを読みやすくするにはどうすればよいですか?

+3

*「これは起こりたくありません」* - なぜですか?それは正しいことです。 – Tomalak

+0

ありがとうございます。私はそれが正しい方法だと分かった。 "XY問題"については – Mady

答えて

3

XStreamのは、"&""&"に変換されます。

それがなければ壊れるでしょう

私はこれが起こりたくありません。

なぜですか? XML内の"&"は、を意味し、"&"を意味します。

どうすればよいですか?

XML仕様に大きな違反があるため、有効なXMLパーサーではこれを行いません。理論的には、この悪質な行為を行うためにオープンソースのXMLパーサーをハックすることができます...しかし、私はそれに強く反対しています。


パーサの正しい動作によって問題が発生している場合、アプリケーション設計に欠陥があります。あなたはそれを使用する前に、テキストにXMLエスケープマッピングを適用することにより、文字エンティティを再挿入

  • 文字列として保存し、OR

  • -

    • は、XMLをパースません:あなたは何かなどを行う必要があります。

    1

    できません。 &はアンペアントを意味する。 xstreamがこれを行うのは正しいことです。出力を実際に"&"にしたい場合は、コードに&&が必要です。CDATA sectionの中に入れてください。

    3

    ソフトウェアのWebサイトには、「XStreamはオブジェクトをXMLにシリアル化して元に戻すためのシンプルなライブラリです」と記載されています。 &&のXMLなので、それを変換しないと意味がありません。また、「XMLになり続けるアンパサンド以外のテキストに変換する」という機能は非常に疑問です。

    an XY problemのように聞こえます。なぜデータに&が必要ですか?

    あなたがXMLやHTMLを出力しているので、それがあると仮定すると、適切な解決策は、テキストを処理することで、テキストと、次のいずれか

    • は、あなたが構築するために使用されているものは何でも、ライブラリの「テキストを挿入」機能を使用します
    • PerlのHTML::EntitiesモジュールやPHPのhtmlspecialchars関数などのエスケープ機能を使用してテキストを実行します(その言語にはJavaを使用するのに十分なほどJavaを使用しませんが、しかし原則は同じです))。 JavaオブジェクトにXMLから変換するとき
    +0

    +1。最後に私はこのパターンの名前を知っている、私の人生は再び意味をなさない。 – Tomalak

    関連する問題