4

そこに良い完全なものがあるかどうか疑問に思っています。不変とは、常に不変であることを意味します。ライブラリにfreeze()または同等のメソッドが含まれており、値のインスタンスを不変にする場合は、返信でこれをメモしてください。私は主に、ノードに変更が加えられたときに新しいコピーを返すライブラリに興味があります。

まず始めに、不変ではないいくつかの一般的なライブラリをリストします。

http://xerces.apache.org/xerces-j/apiDocs/org/w3c/dom/Element.html

removeAttributeNS(java.lang.String namespaceURI, java.lang.String localName) ローカル名と名前空間 URI によって属性を削除します。void setAttribute(java.lang.String name, java.lang.String value) 新しい属性を追加します。

http://www.jdom.org/docs/apidocs/org/jdom2/Comment.html

コメント setText(java.lang.String text) コメントの値を設定します。

すべての重要なクラスにはセッターが含まれていることに注意してください。

http://www.xom.nu/apidocs/index.html?nu/xom/Attribute.html

setType(Attribute.Type タイプ)

       Sets the type of this attribute to one of the ten DTD types or Type.UNDECLARED.  void  setValue(String value) 

       Sets the attribute's value to the specified string, replacing any previous value.

不変性を殺すパフォーマンスについてコメントがある場合は、自由に作成してください。ただし、退屈な意見ではなく、本当においしい情報を提供してください。

4

1 に答える 1

3

間違った言語を使用している可能性があります。Scala と Clojure にはどちらも、不変ノードを持つ XML ライブラリがあります。不変データ構造の概念は、Java コミュニティーで十分に普及しており、誰かがそれに基づいて実動対応の XML ライブラリー全体を開発するほどではないと思います。

Scala ライブラリ jar 全体を取り込みたい場合は、Anti-XMLライブラリの周りに素敵な Java ラッパーを作成して、それを使用することができます。Java コードから Scala ライブラリを呼び出すこと可能ですが、私の経験ではちょっと面倒です。

アップデート:

他にヒットがないように見えるので、これが最も実行可能なオプションかもしれません。以前に調べていたのですが、 Anti-XML のラッパーを Java で作成するのは大変作業ですが、Scala で Java に適したインターフェイスを作成し、Java からそのインターフェイスにアクセスするのも悪くないでしょう。Anti-XML のZippersは、コピーを作成して不変の XML ツリーを更新するために必要なもののようです。深いジッパーのサポートは少し不便に思えますが、おそらく契約を破るものではありません.

于 2012-08-18T06:48:02.570 に答える