2011-11-30 8 views
11

org.w3c.dom.Documentをjava.lang.Stringにする必要があります。私は、2つの可能なアプローチを見つけました.1つはorg.w3c.dom.ls.LSSerializerを使用し、もう1つはjavax.xml.transform.Transformerを使用します。私はそれぞれ以下のサンプルを持っています。LSSerializerとxmlをStringにシリアル化するためのTransformer

誰にどの方法を優先させるか教えてください。

public String docToStringUsingLSSerializer(org.w3c.dom.Document doc) { 
    DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance(); 
    DOMImplementationLS impl = (DOMImplementationLS) reg.getDOMImplementation("LS"); 
    LSSerializer serializer = impl.createLSSerializer(); 
    return serializer.writeToString(doc); 
} 

public String docToStringUsingTransformer(org.w3c.dom.Document doc) { 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    StringWriter stw = new StringWriter(); 
    transformer.transform(new DOMSource(doc), new StreamResult(stw)); 
    return stw.toString(); 
} 
+0

は、あなたが今では万が一の答えを発見しましたか?私は同じ質問を自分自身が疑問に思っています。 – apines

+0

私は答えを得ておらず、どちらかを好む記事を見つけることができませんでした。しかし、Stringをシリアライズする際に見つけた記事や記事のほとんどすべてがjavax.xml.Transformを使用しているため、全体的に好ましいアプローチのようです。それにもかかわらず、私はorg.w3c.dom.ls.LSSerializerと一緒に行きました。私はそれを与える確固たる理由はありません。私はorg.w3c.domパッケージを使って "One Stop Shopping"の感覚が好きです。これまでのところ、私はこの方法を使って報告するのに負のものは何も持っていません。だから、私の答えは「どちらも大丈夫だよ」と思う。 –

答えて

4

考慮すべきいくつかのポイントがあります。

  1. たLSSerializerは通常トランスより速いと考えられています。
  2. それにもかかわらず、実装に大きく依存します。 A トランスフォーマーはSAXに基づいて優れた性能を発揮します。そして、さまざまな実装者がいます(Xalan、Xerces、...)。
  3. あなたのシステムでどれが良いかを確認するのはとても簡単です。複雑なXMLを使って簡単なテストケースを設計する。時間のループthousdnsでそれを実行し、時間のチェック(Syste.getCurrentMillisecondsまたは何か)でそれをラップし、あなた自身が答えを持っている。
  4. 他の素敵な答えは次のとおりです。
+0

あなたの明るい答えに感謝します。私に関係するもう一つの問題は、ライブラリやAPIの作成者がそれを放棄し、基盤技術(この場合はJDK)が更新されなくなる可能性のある「放棄可能性」と呼ばれるものです。あなたは放棄されるか廃止される可能性が高いと思いますか?ありがとう –

関連する問題