Class: REXML::Light::Node
- Inherits:
-
Object
- Object
- REXML::Light::Node
- Defined in:
- lib/rexml/light/node.rb
Overview
Represents a tagged XML element. Elements are characterized by having children, attributes, and names, and can themselves be children.
Constant Summary collapse
- NAMESPLIT =
/^(?:(#{XMLTokens::NCNAME_STR}):)?(#{XMLTokens::NCNAME_STR})/u
- PARENTS =
[ :element, :document, :doctype ]
Instance Method Summary collapse
-
#<<(element) ⇒ Object
Append a child to this element, optionally under a provided namespace.
- #=~(path) ⇒ Object
- #[](reference, ns = nil) ⇒ Object
-
#[]=(reference, ns, value = nil) ⇒ Object
Doesn’t handle namespaces yet.
- #children ⇒ Object
- #each ⇒ Object
- #has_name?(name, namespace = '') ⇒ Boolean
-
#initialize(node = nil) ⇒ Node
constructor
Create a new element.
- #local_name ⇒ Object
- #local_name=(name_str) ⇒ Object
- #name ⇒ Object
- #name=(name_str, ns = nil) ⇒ Object
- #namespace(prefix = prefix()) ⇒ Object
- #namespace=(namespace) ⇒ Object
- #node_type ⇒ Object
- #parent ⇒ Object
- #parent=(node) ⇒ Object
- #prefix(namespace = nil) ⇒ Object
- #root ⇒ Object
- #size ⇒ Object
- #text=(foo) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(node = nil) ⇒ Node
Create a new element.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/rexml/light/node.rb', line 13 def initialize node=nil @node = node if node.kind_of? String node = [ :text, node ] elsif node.nil? node = [ :document, nil, nil ] elsif node[0] == :start_element node[0] = :element elsif node[0] == :start_doctype node[0] = :doctype elsif node[0] == :start_document node[0] = :document end end |
Instance Method Details
#<<(element) ⇒ Object
Append a child to this element, optionally under a provided namespace. The namespace argument is ignored if the element argument is an Element object. Otherwise, the element argument is a string, the namespace (if provided) is the namespace the element is created in.
114 115 116 117 118 119 120 121 122 123 |
# File 'lib/rexml/light/node.rb', line 114 def << element if node_type() == :text at(-1) << element else newnode = Node.new( element ) newnode.parent = self self.push( newnode ) end at(-1) end |
#=~(path) ⇒ Object
90 91 92 |
# File 'lib/rexml/light/node.rb', line 90 def =~( path ) XPath.match( self, path ) end |
#[](reference, ns = nil) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/rexml/light/node.rb', line 78 def []( reference, ns=nil ) if reference.kind_of? String pfx = '' pfx = "#{prefix(ns)}:" if ns at(3)["#{pfx}#{reference}"] elsif reference.kind_of? Range _old_get( Range.new(4+reference.begin, reference.end, reference.exclude_end?) ) else _old_get( 4+reference ) end end |
#[]=(reference, ns, value = nil) ⇒ Object
Doesn’t handle namespaces yet
95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rexml/light/node.rb', line 95 def []=( reference, ns, value=nil ) if reference.kind_of? String value = ns unless value at( 3 )[reference] = value elsif reference.kind_of? Range _old_put( Range.new(3+reference.begin, reference.end, reference.exclude_end?), ns ) else if value _old_put( 4+reference, ns, value ) else _old_put( 4+reference, ns ) end end end |
#children ⇒ Object
143 144 145 |
# File 'lib/rexml/light/node.rb', line 143 def children self end |
#each ⇒ Object
36 37 38 |
# File 'lib/rexml/light/node.rb', line 36 def each size.times { |x| yield( at(x+4) ) } end |
#has_name?(name, namespace = '') ⇒ Boolean
139 140 141 |
# File 'lib/rexml/light/node.rb', line 139 def has_name?( name, namespace = '' ) at(3) == name and namespace() == namespace end |
#local_name ⇒ Object
54 55 56 57 |
# File 'lib/rexml/light/node.rb', line 54 def local_name namesplit @name end |
#local_name=(name_str) ⇒ Object
59 60 61 |
# File 'lib/rexml/light/node.rb', line 59 def local_name=( name_str ) _old_put( 1, "#@prefix:#{name_str}" ) end |
#name ⇒ Object
40 41 42 |
# File 'lib/rexml/light/node.rb', line 40 def name at(2) end |
#name=(name_str, ns = nil) ⇒ Object
44 45 46 47 48 |
# File 'lib/rexml/light/node.rb', line 44 def name=( name_str, ns=nil ) pfx = '' pfx = "#{prefix(ns)}:" if ns _old_put(2, "#{pfx}#{name_str}") end |
#namespace(prefix = prefix()) ⇒ Object
67 68 69 |
# File 'lib/rexml/light/node.rb', line 67 def namespace( prefix=prefix() ) namespace_of( self, prefix ) end |
#namespace=(namespace) ⇒ Object
71 72 73 74 75 76 |
# File 'lib/rexml/light/node.rb', line 71 def namespace=( namespace ) @prefix = prefix( namespace ) pfx = '' pfx = "#@prefix:" if @prefix.size > 0 _old_put(1, "#{pfx}#@name") end |
#node_type ⇒ Object
125 126 127 |
# File 'lib/rexml/light/node.rb', line 125 def node_type _old_get(0) end |
#parent ⇒ Object
147 148 149 |
# File 'lib/rexml/light/node.rb', line 147 def parent at(1) end |
#parent=(node) ⇒ Object
50 51 52 |
# File 'lib/rexml/light/node.rb', line 50 def parent=( node ) _old_put(1,node) end |
#prefix(namespace = nil) ⇒ Object
63 64 65 |
# File 'lib/rexml/light/node.rb', line 63 def prefix( namespace=nil ) prefix_of( self, namespace ) end |
#root ⇒ Object
134 135 136 137 |
# File 'lib/rexml/light/node.rb', line 134 def root context = self context = context.at(1) while context.at(1) end |
#size ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/rexml/light/node.rb', line 28 def size if PARENTS.include? @node[0] @node[-1].size else 0 end end |
#text=(foo) ⇒ Object
129 130 131 132 |
# File 'lib/rexml/light/node.rb', line 129 def text=( foo ) replace = at(4).kind_of?(String)? 1 : 0 self._old_put(4,replace, normalizefoo) end |
#to_s ⇒ Object
151 152 153 |
# File 'lib/rexml/light/node.rb', line 151 def to_s end |