class REXML::Light::Node

Represents a tagged XML element. Elements are characterized by having children, attributes, and names, and can themselves be children.

Constants

NAMESPLIT
PARENTS

Public Class Methods

new(node=nil) click to toggle source

Create a new element.

# File lib/rexml/light/node.rb, line 20
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

Public Instance Methods

<<(element) click to toggle source

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 121
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 ) click to toggle source
# File lib/rexml/light/node.rb, line 97
def =~( path )
  XPath.match( self, path )
end
[]( reference, ns=nil ) click to toggle source
# File lib/rexml/light/node.rb, line 85
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 ) click to toggle source

Doesn't handle namespaces yet

# File lib/rexml/light/node.rb, line 102
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() click to toggle source
# File lib/rexml/light/node.rb, line 150
def children
  self
end
each() { |at(x+4)| ... } click to toggle source
# File lib/rexml/light/node.rb, line 43
def each
  size.times { |x| yield( at(x+4) ) }
end
has_name?( name, namespace = '' ) click to toggle source
# File lib/rexml/light/node.rb, line 146
def has_name?( name, namespace = '' )
  at(3) == name and namespace() == namespace
end
local_name() click to toggle source
# File lib/rexml/light/node.rb, line 61
def local_name
  namesplit
  @name
end
local_name=( name_str ) click to toggle source
# File lib/rexml/light/node.rb, line 66
def local_name=( name_str )
  _old_put( 1, "#@prefix:#{name_str}" )
end
name() click to toggle source
# File lib/rexml/light/node.rb, line 47
def name
  at(2)
end
name=( name_str, ns=nil ) click to toggle source
# File lib/rexml/light/node.rb, line 51
def name=( name_str, ns=nil )
  pfx = ''
  pfx = "#{prefix(ns)}:" if ns
  _old_put(2, "#{pfx}#{name_str}")
end
namespace( prefix=prefix() ) click to toggle source
# File lib/rexml/light/node.rb, line 74
def namespace( prefix=prefix() )
  namespace_of( self, prefix )
end
namespace=( namespace ) click to toggle source
# File lib/rexml/light/node.rb, line 78
def namespace=( namespace )
  @prefix = prefix( namespace )
  pfx = ''
  pfx = "#@prefix:" if @prefix.size > 0
  _old_put(1, "#{pfx}#@name")
end
node_type() click to toggle source
# File lib/rexml/light/node.rb, line 132
def node_type
  _old_get(0)
end
parent() click to toggle source
# File lib/rexml/light/node.rb, line 154
def parent
  at(1)
end
parent=( node ) click to toggle source
# File lib/rexml/light/node.rb, line 57
def parent=( node )
  _old_put(1,node)
end
prefix( namespace=nil ) click to toggle source
# File lib/rexml/light/node.rb, line 70
def prefix( namespace=nil )
  prefix_of( self, namespace )
end
root() click to toggle source
# File lib/rexml/light/node.rb, line 141
def root
  context = self
  context = context.at(1) while context.at(1)
end
size() click to toggle source
# File lib/rexml/light/node.rb, line 35
def size
  if PARENTS.include? @node[0]
    @node[-1].size
  else
    0
  end
end
text=( foo ) click to toggle source
# File lib/rexml/light/node.rb, line 136
def text=( foo )
  replace = at(4).kind_of?(String)? 1 : 0
  self._old_put(4,replace, normalizefoo)
end
to_s() click to toggle source
# File lib/rexml/light/node.rb, line 158
def to_s

end

Private Instance Methods

namespace_of( node, prefix=nil ) click to toggle source
# File lib/rexml/light/node.rb, line 171
def namespace_of( node, prefix=nil )
  if not prefix
    name = at(2)
    name =~ NAMESPLIT
    prefix = $1
  end
  to_find = 'xmlns'
  to_find = "xmlns:#{prefix}" if not prefix.nil?
  ns = at(3)[ to_find ]
  ns ? ns : namespace_of( @node[0], prefix )
end
namesplit() click to toggle source
# File lib/rexml/light/node.rb, line 164
def namesplit
  return if @name.defined?
  at(2) =~ NAMESPLIT
  @prefix = '' || $1
  @name = $2
end
prefix_of( node, namespace=nil ) click to toggle source
# File lib/rexml/light/node.rb, line 183
def prefix_of( node, namespace=nil )
  if not namespace
    name = node.name
    name =~ NAMESPLIT
    $1
  else
    ns = at(3).find { |k,v| v == namespace }
    ns ? ns : prefix_of( node.parent, namespace )
  end
end