Class: REXML::Light::Node

Inherits:
Object
  • Object
show all
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

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

#childrenObject



143
144
145
# File 'lib/rexml/light/node.rb', line 143

def children
  self
end

#eachObject



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

Returns:

  • (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_nameObject



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

#nameObject



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_typeObject



125
126
127
# File 'lib/rexml/light/node.rb', line 125

def node_type
  _old_get(0)
end

#parentObject



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

#rootObject



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

#sizeObject



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_sObject



151
152
153
# File 'lib/rexml/light/node.rb', line 151

def to_s

end