class REXML::Parent
Parent 有子节点,并且有用于访问它们的方法。Parent
类除了作为其他一些对象的超类之外,永远不会遇到。
公共类方法
构造函数 @param parent 如果提供,将设置为此对象的父对象
REXML::Child::new
# File rexml-3.4.0/lib/rexml/parent.rb, line 13 def initialize parent=nil super(parent) @children = [] end
公共实例方法
获取给定索引处的子节点 @param index 要获取的子节点的整数索引
# File rexml-3.4.0/lib/rexml/parent.rb, line 57 def []( index ) @children[index] end
设置索引条目。请参阅 Array.[]= @param index 要设置的元素的索引 @param opt 要设置的对象,或整数长度 @param child 如果 opt 是整数,则这是要设置的子节点 @return 父节点(self)
# File rexml-3.4.0/lib/rexml/parent.rb, line 70 def []=( *args ) args[-1].parent = self @children[*args[0..-2]] = args[-1] end
# File rexml-3.4.0/lib/rexml/parent.rb, line 18 def add( object ) object.parent = self @children << object object end
深层克隆此对象。这将创建此 Parent
的完整副本,包括所有后代。
# File rexml-3.4.0/lib/rexml/parent.rb, line 148 def deep_clone cl = clone() each do |child| if child.kind_of? Parent cl << child.deep_clone else cl << child.clone end end cl end
# File rexml-3.4.0/lib/rexml/parent.rb, line 32 def delete( object ) found = false @children.delete_if {|c| c.equal?(object) and found = true } object.parent = nil if found found ? object : nil end
# File rexml-3.4.0/lib/rexml/parent.rb, line 47 def delete_at( index ) @children.delete_at index end
# File rexml-3.4.0/lib/rexml/parent.rb, line 43 def delete_if( &block ) @children.delete_if(&block) end
# File rexml-3.4.0/lib/rexml/parent.rb, line 39 def each(&block) @children.each(&block) end
# File rexml-3.4.0/lib/rexml/parent.rb, line 51 def each_index( &block ) @children.each_index(&block) end
获取给定子节点的索引 @param child 要获取索引的子节点 @return 子节点的索引,如果该对象不是此父节点的子节点,则返回 nil。
# File rexml-3.4.0/lib/rexml/parent.rb, line 123 def index( child ) count = -1 @children.find { |i| count += 1 ; i.hash == child.hash } count end
在另一个子节点之后插入子节点 @param child1 这可以是 xpath 或一个 Element
。如果是一个 Element
,child2 将插入到父节点的子列表中的 child1 之后。如果是一个 xpath,child2 将插入到第一个匹配 xpath 的子节点之后。 @param child2 要插入的子节点 @return 父节点(self)
# File rexml-3.4.0/lib/rexml/parent.rb, line 102 def insert_after( child1, child2 ) if child1.kind_of? String child1 = XPath.first( self, child1 ) child1.parent.insert_after child1, child2 else ind = index(child1)+1 child2.parent.delete(child2) if child2.parent @children[ind,0] = child2 child2.parent = self end self end
在另一个子节点之前插入子节点 @param child1 这可以是 xpath 或一个 Element
。如果是一个 Element
,child2 将插入到父节点的子列表中的 child1 之前。如果是一个 xpath,child2 将插入到第一个匹配 xpath 的子节点之前。 @param child2 要插入的子节点 @return 父节点(self)
# File rexml-3.4.0/lib/rexml/parent.rb, line 82 def insert_before( child1, child2 ) if child1.kind_of? String child1 = XPath.first( self, child1 ) child1.parent.insert_before child1, child2 else ind = index(child1) child2.parent.delete(child2) if child2.parent @children[ind,0] = child2 child2.parent = self end self end
# File rexml-3.4.0/lib/rexml/parent.rb, line 162 def parent? true end
用另一个子节点替换一个子节点,确保节点列表正确 @param to_replace 要替换的子节点(必须是 Child
) @param replacement 要插入到节点列表中的子节点(必须是 Child
)
# File rexml-3.4.0/lib/rexml/parent.rb, line 140 def replace_child( to_replace, replacement ) @children.map! {|c| c.equal?( to_replace ) ? replacement : c } to_replace.parent = nil replacement.parent = self end
@return 此父节点的子节点数量
# File rexml-3.4.0/lib/rexml/parent.rb, line 130 def size @children.size end
# File rexml-3.4.0/lib/rexml/parent.rb, line 115 def to_a @children.dup end
# File rexml-3.4.0/lib/rexml/parent.rb, line 27 def unshift( object ) object.parent = self @children.unshift object end