libxml-ruby中命名属性和属性有什么区别?

时间:2014-07-29 01:01:38

标签: ruby xml libxml-ruby

之间有什么区别
node.property("name")

node.attributes["name"]

根据documentation,一个返回“命名属性值”,另一个返回“属性值”,但我没有看到任何区别。

可能扮演某个角色的一件事是命名空间。这两种方法都有其setter版本node.property("name")=valuenode.attributes["name"]=value,并且它们如何处理命名空间属性可能会有所不同。

1 个答案:

答案 0 :(得分:1)

节点#属性,查看源:

# File lib/libxml/properties.rb, line 5
def property(name)
  warn('Node#properties is deprecated.  Use Node#[] instead.')
  self[name]
end

所以你的问题变成了Node#[]和Node#属性之间的区别。答案是Node#[]返回单个属性,Node#属性返回包含所有属性的哈希,这比一次检索一个更容易。当然,您可以通过在哈希之后编写[' some_key']来查找任何哈希值,例如:

puts( 
  { a: 1, b: 2}[:b] 
)

Node#[]是一种查找一个属性的更有效方法,因为它不会先创建整个哈希。