Class: Oga::XML::Node
- Inherits:
-
Object
- Object
- Oga::XML::Node
- Defined in:
- lib/oga/xml/node.rb
Overview
A generic XML node. Instances of this class can belong to a NodeSet and can be used to query surrounding and parent nodes.
Direct Known Subclasses
Instance Attribute Summary collapse
Instance Method Summary collapse
-
#after(other) ⇒ Object
Inserts the given node after the current node.
-
#before(other) ⇒ Object
Inserts the given node before the current node.
-
#children ⇒ Oga::XML::NodeSet
Returns the child nodes of the current node.
-
#children=(nodes) ⇒ Object
Sets the child nodes of the element.
-
#each_ancestor {|| ... } ⇒ Object
Yields all ancestor elements of the current node.
-
#html? ⇒ TrueClass|FalseClass
-
#initialize(options = {}) ⇒ Node
constructor
A new instance of Node.
-
#next_element ⇒ Oga::XML::Element
Returns the next element node or nil if there is none.
-
#parent ⇒ Oga::XML::Node
Returns the parent node of the current node.
-
#previous_element ⇒ Oga::XML::Element
Returns the previous element node or nil if there is none.
-
#remove ⇒ Oga::XML::Node
Removes the current node from the owning node set.
-
#replace(other) ⇒ Object
Replaces the current node with another.
-
#root_node ⇒ Oga::XML::Document|Oga::XML::Node
Returns the root document/node of the current node.
-
#xml? ⇒ TrueClass|FalseClass
Methods included from ToXML
Methods included from Traversal
Constructor Details
#initialize(options = {}) ⇒ Node
Returns a new instance of Node
26 27 28 29 |
# File 'lib/oga/xml/node.rb', line 26 def initialize( = {}) self.node_set = [:node_set] self.children = [:children] if [:children] end |
Instance Attribute Details
#node_set ⇒ Oga::XML::NodeSet
11 12 13 |
# File 'lib/oga/xml/node.rb', line 11 def node_set @node_set end |
#previous ⇒ Oga::XML::Node
14 15 16 |
# File 'lib/oga/xml/node.rb', line 14 def previous @previous end |
Instance Method Details
#after(other) ⇒ Object
Inserts the given node after the current node.
152 153 154 155 156 |
# File 'lib/oga/xml/node.rb', line 152 def after(other) index = node_set.index(self) + 1 node_set.insert(index, other) end |
#before(other) ⇒ Object
Inserts the given node before the current node.
143 144 145 146 147 |
# File 'lib/oga/xml/node.rb', line 143 def before(other) index = node_set.index(self) node_set.insert(index, other) end |
#children ⇒ Oga::XML::NodeSet
Returns the child nodes of the current node.
43 44 45 |
# File 'lib/oga/xml/node.rb', line 43 def children @children ||= NodeSet.new([], self) end |
#children=(nodes) ⇒ Object
Sets the child nodes of the element.
50 51 52 53 54 55 56 |
# File 'lib/oga/xml/node.rb', line 50 def children=(nodes) if nodes.is_a?(NodeSet) @children = nodes else @children = NodeSet.new(nodes, self) end end |
#each_ancestor {|| ... } ⇒ Object
Yields all ancestor elements of the current node.
182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/oga/xml/node.rb', line 182 def each_ancestor return to_enum(:each_ancestor) unless block_given? node = parent while node.is_a?(XML::Element) yield node node = node.parent end end |
#html? ⇒ TrueClass|FalseClass
159 160 161 162 163 164 165 166 167 |
# File 'lib/oga/xml/node.rb', line 159 def html? if @html_p.nil? root = root_node @html_p = root.is_a?(Document) && root.html? end @html_p end |
#next_element ⇒ Oga::XML::Element
Returns the next element node or nil if there is none.
82 83 84 85 86 87 88 89 90 |
# File 'lib/oga/xml/node.rb', line 82 def next_element node = self while node = node.next return node if node.is_a?(Element) end return end |
#parent ⇒ Oga::XML::Node
Returns the parent node of the current node. If there is no parent node
nil
is returned instead.
62 63 64 |
# File 'lib/oga/xml/node.rb', line 62 def parent node_set ? node_set.owner : nil end |
#previous_element ⇒ Oga::XML::Element
Returns the previous element node or nil if there is none.
69 70 71 72 73 74 75 76 77 |
# File 'lib/oga/xml/node.rb', line 69 def previous_element node = self while node = node.previous return node if node.is_a?(Element) end return end |
#remove ⇒ Oga::XML::Node
Removes the current node from the owning node set.
117 118 119 |
# File 'lib/oga/xml/node.rb', line 117 def remove return node_set.delete(self) if node_set end |
#replace(other) ⇒ Object
Replaces the current node with another.
131 132 133 134 135 136 137 138 |
# File 'lib/oga/xml/node.rb', line 131 def replace(other) if other.is_a?(String) other = Text.new(:text => other) end before(other) remove end |
#root_node ⇒ Oga::XML::Document|Oga::XML::Node
Returns the root document/node of the current node. The node is retrieved by traversing upwards in the DOM tree from the current node.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/oga/xml/node.rb', line 96 def root_node unless @root_node node = self loop do if !node.is_a?(Document) and node.node_set node = node.node_set.owner else break end end @root_node = node end @root_node end |
#xml? ⇒ TrueClass|FalseClass
170 171 172 |
# File 'lib/oga/xml/node.rb', line 170 def xml? !html? end |