所有值类型都是不可变的任何 java XML 树库

mP.*_*mP. 5 java xml

我只是想知道是否有任何好的完整的。我所说的不可变是指那些始终不可变的。如果该库包含 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

Comment setText(java.lang.String text) 这将设置注释的值。

请注意,所有重要的类都包括 setter。

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

setType(属性.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.
Run Code Online (Sandbox Code Playgroud)

如果您对不变性杀死性能有任何评论,那么可以随意发表,但提供一些真正有用的信息,而不是无聊的意见。

Dao*_*Wen 3

也许您只是使用了错误的语言\xe2\x80\x94Scala 和 Clojure 都有带有不可变节点的 XML 库。我认为不可变数据结构的概念在 Java 社区中还不够流行,以至于有人无法基于它来开发一个完整的可用于生产的 XML 库。

\n\n

如果您愿意引入整个 Scala 库 jar,那么也许您可以围绕Anti-XML库编写一些漂亮的 Java 包装器并使用它。可以从 Java 代码调用 Scala 库,但根据我的经验这有点痛苦。

\n\n

更新:

\n\n

由于您似乎没有获得任何其他点击,这可能是您最可行的选择。我之前正在研究它,在 Java\xe2\x80\x94 中编写 Anti-XML 的包装器将是一个可怕的痛苦,但在 Scala 中编写一个 Java 友好的接口然后访问也不会那么糟糕来自 Java 的接口。Anti-XML 的Zipper似乎正是通过复制来更新不可变 XML 树所需要的。对深拉链的支持似乎有点不便,但这可能不会破坏交易。

\n

  • 现在已经是 2016 年了,尽管函数式编程在 java 8 中变得流行,但情况并没有改变。 (3认同)