我只是想知道是否有任何好的完整的。不可变的我的意思是那些总是不可变的。如果库包含 freeze() 或等效方法以使某些值实例不可变,那么请在回复中注明这一点。我最感兴趣的是在对所述节点进行更改时返回新副本的库。
首先,我将列出一些并非不可变的通用库。
http://xerces.apache.org/xerces-j/apiDocs/org/w3c/dom/Element.html
removeAttributeNS(java.lang.String namespaceURI, java.lang.String localName) Removes an attribute by local name and namespace URI. void setAttribute(java.lang.String name, java.lang.String value) Adds a new attribute.
http://www.jdom.org/docs/apidocs/org/jdom2/Comment.html
Comment setText(java.lang.String text) This will set the value of the Comment.
注意所有重要的类都包含 setter。
http://www.xom.nu/apidocs/index.html?nu/xom/Attribute.html
setType(Attribute.Type 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.
如果您对不可变性会降低性能有任何意见,请随意提出,但请提供一些真正有用的信息,而不是无聊的意见。
最佳答案
也许您只是使用了错误的语言——Scala 和 Clojure 都有带有不可变节点的 XML 库。我不认为不可变数据结构的概念在 Java 社区中流行到足以让有人基于它开发一个完整的生产就绪 XML 库。
如果您愿意引入整个 Scala 库 jar,那么也许您可以围绕 Anti-XML 编写一些不错的 Java 包装器。库并使用它。 可以从 Java 代码调用 Scala 库,但根据我的经验,这有点痛苦。
更新:
由于您似乎没有获得任何其他点击,这可能是您最可行的选择。我之前研究过它,用 Java 编写 Anti-XML 的包装器将是一个可怕的痛苦——但用 Scala 编写一个 Java 友好的接口(interface)并不会那么糟糕然后从 Java 访问该接口(interface)。反 XML Zippers似乎正是您通过制作副本来更新不可变 XML 树所需要的。对深 zipper 的支持似乎有点不便,但它可能不会破坏交易。
关于java - 所有值类型都是不可变的任何 Java XML 树库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015622/
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_