| Class | REXML::Light::Node |
| In: |
lib/rexml/light/node.rb
|
| Parent: | Object |
| NAMESPLIT | = | /^(?:(#{XMLTokens::NCNAME_STR}):)?(#{XMLTokens::NCNAME_STR})/u |
| PARENTS | = | [ :element, :document, :doctype ] |
Create a new element.
# File lib/rexml/light/node.rb, line 21
21: def initialize node=nil
22: @node = node
23: if node.kind_of? String
24: node = [ :text, node ]
25: elsif node.nil?
26: node = [ :document, nil, nil ]
27: elsif node[0] == :start_element
28: node[0] = :element
29: elsif node[0] == :start_doctype
30: node[0] = :doctype
31: elsif node[0] == :start_document
32: node[0] = :document
33: end
34: end
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.
# File lib/rexml/light/node.rb, line 122
122: def << element
123: if node_type() == :text
124: at(-1) << element
125: else
126: newnode = Node.new( element )
127: newnode.parent = self
128: self.push( newnode )
129: end
130: at(-1)
131: end
# File lib/rexml/light/node.rb, line 86
86: def []( reference, ns=nil )
87: if reference.kind_of? String
88: pfx = ''
89: pfx = "#{prefix(ns)}:" if ns
90: at(3)["#{pfx}#{reference}"]
91: elsif reference.kind_of? Range
92: _old_get( Range.new(4+reference.begin, reference.end, reference.exclude_end?) )
93: else
94: _old_get( 4+reference )
95: end
96: end
Doesn‘t handle namespaces yet
# File lib/rexml/light/node.rb, line 103
103: def []=( reference, ns, value=nil )
104: if reference.kind_of? String
105: value = ns unless value
106: at( 3 )[reference] = value
107: elsif reference.kind_of? Range
108: _old_put( Range.new(3+reference.begin, reference.end, reference.exclude_end?), ns )
109: else
110: if value
111: _old_put( 4+reference, ns, value )
112: else
113: _old_put( 4+reference, ns )
114: end
115: end
116: end
# File lib/rexml/light/node.rb, line 44
44: def each( &block )
45: size.times { |x| yield( at(x+4) ) }
46: end
# File lib/rexml/light/node.rb, line 147
147: def has_name?( name, namespace = '' )
148: at(3) == name and namespace() == namespace
149: end
# File lib/rexml/light/node.rb, line 67
67: def local_name=( name_str )
68: _old_put( 1, "#@prefix:#{name_str}" )
69: end
# File lib/rexml/light/node.rb, line 52
52: def name=( name_str, ns=nil )
53: pfx = ''
54: pfx = "#{prefix(ns)}:" if ns
55: _old_put(2, "#{pfx}#{name_str}")
56: end
# File lib/rexml/light/node.rb, line 75
75: def namespace( prefix=prefix() )
76: namespace_of( self, prefix )
77: end
# File lib/rexml/light/node.rb, line 79
79: def namespace=( namespace )
80: @prefix = prefix( namespace )
81: pfx = ''
82: pfx = "#@prefix:" if @prefix.size > 0
83: _old_put(1, "#{pfx}#@name")
84: end
# File lib/rexml/light/node.rb, line 71
71: def prefix( namespace=nil )
72: prefix_of( self, namespace )
73: end
# File lib/rexml/light/node.rb, line 142
142: def root
143: context = self
144: context = context.at(1) while context.at(1)
145: end
# File lib/rexml/light/node.rb, line 36
36: def size
37: if PARENTS.include? @node[0]
38: @node[-1].size
39: else
40: 0
41: end
42: end
# File lib/rexml/light/node.rb, line 137
137: def text=( foo )
138: replace = at(4).kind_of?(String)? 1 : 0
139: self._old_put(4,replace, normalizefoo)
140: end
# File lib/rexml/light/node.rb, line 172
172: def namespace_of( node, prefix=nil )
173: if not prefix
174: name = at(2)
175: name =~ NAMESPLIT
176: prefix = $1
177: end
178: to_find = 'xmlns'
179: to_find = "xmlns:#{prefix}" if not prefix.nil?
180: ns = at(3)[ to_find ]
181: ns ? ns : namespace_of( @node[0], prefix )
182: end
# File lib/rexml/light/node.rb, line 165
165: def namesplit
166: return if @name.defined?
167: at(2) =~ NAMESPLIT
168: @prefix = '' || $1
169: @name = $2
170: end