xmlparser 0.6.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MANIFEST +112 -0
- data/README +697 -0
- data/README.ja +789 -0
- data/Rakefile +34 -0
- data/ext/encoding.h +91 -0
- data/ext/xmlparser/mkrf_conf.rb +28 -0
- data/ext/xmlparser/xmlparser.c +2226 -0
- data/lib/sax.rb +1 -0
- data/lib/saxdriver.rb +1 -0
- data/lib/wget.rb +47 -0
- data/lib/xml/dom/builder-ja.rb +58 -0
- data/lib/xml/dom/builder.rb +310 -0
- data/lib/xml/dom/core.rb +3276 -0
- data/lib/xml/dom/digest.rb +94 -0
- data/lib/xml/dom/visitor.rb +182 -0
- data/lib/xml/dom2/attr.rb +213 -0
- data/lib/xml/dom2/cdatasection.rb +76 -0
- data/lib/xml/dom2/characterdata.rb +177 -0
- data/lib/xml/dom2/comment.rb +81 -0
- data/lib/xml/dom2/core.rb +19 -0
- data/lib/xml/dom2/document.rb +317 -0
- data/lib/xml/dom2/documentfragment.rb +82 -0
- data/lib/xml/dom2/documenttype.rb +102 -0
- data/lib/xml/dom2/dombuilder.rb +277 -0
- data/lib/xml/dom2/dombuilderfilter.rb +12 -0
- data/lib/xml/dom2/domentityresolver.rb +13 -0
- data/lib/xml/dom2/domentityresolverimpl.rb +37 -0
- data/lib/xml/dom2/domexception.rb +95 -0
- data/lib/xml/dom2/domimplementation.rb +61 -0
- data/lib/xml/dom2/dominputsource.rb +29 -0
- data/lib/xml/dom2/element.rb +533 -0
- data/lib/xml/dom2/entity.rb +110 -0
- data/lib/xml/dom2/entityreference.rb +107 -0
- data/lib/xml/dom2/namednodemap.rb +138 -0
- data/lib/xml/dom2/node.rb +587 -0
- data/lib/xml/dom2/nodelist.rb +231 -0
- data/lib/xml/dom2/notation.rb +86 -0
- data/lib/xml/dom2/processinginstruction.rb +155 -0
- data/lib/xml/dom2/text.rb +128 -0
- data/lib/xml/dom2/xpath.rb +398 -0
- data/lib/xml/encoding-ja.rb +42 -0
- data/lib/xml/parser.rb +13 -0
- data/lib/xml/parserns.rb +236 -0
- data/lib/xml/sax.rb +353 -0
- data/lib/xml/saxdriver.rb +370 -0
- data/lib/xml/xpath.rb +3284 -0
- data/lib/xml/xpath.ry +2352 -0
- data/lib/xmldigest.rb +1 -0
- data/lib/xmltree.rb +1 -0
- data/lib/xmltreebuilder.rb +1 -0
- data/lib/xmltreevisitor.rb +1 -0
- metadata +111 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
## -*- Ruby -*-
|
2
|
+
## XML::DOM
|
3
|
+
## 1998-2001 by yoshidam
|
4
|
+
##
|
5
|
+
|
6
|
+
require 'xml/dom2/text'
|
7
|
+
|
8
|
+
module XML
|
9
|
+
module DOM
|
10
|
+
|
11
|
+
=begin
|
12
|
+
== Class XML::DOM::CDATASection
|
13
|
+
|
14
|
+
=== superclass
|
15
|
+
Text
|
16
|
+
|
17
|
+
=end
|
18
|
+
class CDATASection<Text
|
19
|
+
=begin
|
20
|
+
=== Class Methods
|
21
|
+
|
22
|
+
--- CDATASection.new(text = nil)
|
23
|
+
|
24
|
+
creates a new CDATASection.
|
25
|
+
=end
|
26
|
+
def initialize(text = nil)
|
27
|
+
super(text)
|
28
|
+
raise "parameter error" if !text
|
29
|
+
end
|
30
|
+
|
31
|
+
=begin
|
32
|
+
=== Methods
|
33
|
+
|
34
|
+
--- CDATASection#nodeType
|
35
|
+
|
36
|
+
[DOM]
|
37
|
+
returns the nodeType.
|
38
|
+
=end
|
39
|
+
## [DOM]
|
40
|
+
def nodeType
|
41
|
+
CDATA_SECTION_NODE
|
42
|
+
end
|
43
|
+
|
44
|
+
=begin
|
45
|
+
--- CDATASection#nodeName
|
46
|
+
|
47
|
+
[DOM]
|
48
|
+
returns the nodeName.
|
49
|
+
=end
|
50
|
+
## [DOM]
|
51
|
+
def nodeName
|
52
|
+
"#cdata-section"
|
53
|
+
end
|
54
|
+
|
55
|
+
=begin
|
56
|
+
--- CDATASection#to_s
|
57
|
+
|
58
|
+
returns the string representation of the CDATASection.
|
59
|
+
=end
|
60
|
+
def to_s
|
61
|
+
"<![CDATA[#{@value}]]>"
|
62
|
+
end
|
63
|
+
|
64
|
+
=begin
|
65
|
+
--- CDATASection#dump(depth = 0)
|
66
|
+
|
67
|
+
dumps the CDATASection.
|
68
|
+
=end
|
69
|
+
def dump(depth = 0)
|
70
|
+
print ' ' * depth * 2
|
71
|
+
print "<![CDATA[#{@value.inspect}]]>\n"
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
## -*- Ruby -*-
|
2
|
+
## XML::DOM
|
3
|
+
## 1998-2001 by yoshidam
|
4
|
+
##
|
5
|
+
|
6
|
+
require 'xml/dom2/node'
|
7
|
+
require 'xml/dom2/domexception'
|
8
|
+
|
9
|
+
module XML
|
10
|
+
module DOM
|
11
|
+
|
12
|
+
=begin
|
13
|
+
== Class XML::DOM::CharacterData
|
14
|
+
|
15
|
+
=== superclass
|
16
|
+
Node
|
17
|
+
|
18
|
+
=end
|
19
|
+
class CharacterData<Node
|
20
|
+
|
21
|
+
=begin
|
22
|
+
=== Class Methods
|
23
|
+
|
24
|
+
--- CharacterData.new(text)
|
25
|
+
|
26
|
+
creates a new CharacterData.
|
27
|
+
=end
|
28
|
+
## new(text)
|
29
|
+
## text: String
|
30
|
+
def initialize(text = nil)
|
31
|
+
super()
|
32
|
+
raise "parameter error" if !text
|
33
|
+
@value = text
|
34
|
+
end
|
35
|
+
|
36
|
+
=begin
|
37
|
+
=== Methods
|
38
|
+
|
39
|
+
--- CharacterData#data()
|
40
|
+
|
41
|
+
[DOM]
|
42
|
+
returns the character data of the node.
|
43
|
+
=end
|
44
|
+
## [DOM]
|
45
|
+
def data
|
46
|
+
@value.dup
|
47
|
+
end
|
48
|
+
|
49
|
+
=begin
|
50
|
+
--- CharacterData#data=(p)
|
51
|
+
|
52
|
+
[DOM]
|
53
|
+
set the character data of the node.
|
54
|
+
=end
|
55
|
+
## [DOM]
|
56
|
+
def data=(p)
|
57
|
+
@value = p
|
58
|
+
end
|
59
|
+
|
60
|
+
=begin
|
61
|
+
--- CharacterData#length()
|
62
|
+
|
63
|
+
[DOM]
|
64
|
+
returns length of this CharacterData.
|
65
|
+
=end
|
66
|
+
## [DOM]
|
67
|
+
def length
|
68
|
+
@value.length
|
69
|
+
end
|
70
|
+
|
71
|
+
=begin
|
72
|
+
--- CharacterData#substringData(start, count)
|
73
|
+
|
74
|
+
[DOM]
|
75
|
+
extracts a range of data from the node.
|
76
|
+
=end
|
77
|
+
## [DOM]
|
78
|
+
def substringData(start, count)
|
79
|
+
if start < 0 || start > @value.length || count < 0
|
80
|
+
raise DOMException.new(DOMException::INDEX_SIZE_ERR)
|
81
|
+
end
|
82
|
+
## if the sum of start and count > length,
|
83
|
+
## return all characters to the end of the value.
|
84
|
+
@value[start, count]
|
85
|
+
end
|
86
|
+
|
87
|
+
=begin
|
88
|
+
--- CharacterData#appendData(str)
|
89
|
+
|
90
|
+
[DOM]
|
91
|
+
append the string to the end of the character data.
|
92
|
+
=end
|
93
|
+
## [DOM]
|
94
|
+
def appendData(str)
|
95
|
+
@value << str
|
96
|
+
end
|
97
|
+
|
98
|
+
=begin
|
99
|
+
--- CharacterData#insertData(offset, str)
|
100
|
+
|
101
|
+
[DOM]
|
102
|
+
insert a string at the specified character offset.
|
103
|
+
=end
|
104
|
+
## [DOM]
|
105
|
+
def insertData(offset, str)
|
106
|
+
if offset < 0 || offset > @value.length
|
107
|
+
raise DOMException.new(DOMException::INDEX_SIZE_ERR)
|
108
|
+
end
|
109
|
+
@value[offset, 0] = str
|
110
|
+
end
|
111
|
+
|
112
|
+
=begin
|
113
|
+
--- CharacterData#deleteData(offset, count)
|
114
|
+
|
115
|
+
[DOM]
|
116
|
+
removes a range of characters from the node.
|
117
|
+
=end
|
118
|
+
## [DOM]
|
119
|
+
def deleteData(offset, count)
|
120
|
+
if offset < 0 || offset > @value.length || count < 0
|
121
|
+
raise DOMException.new(DOMException::INDEX_SIZE_ERR)
|
122
|
+
end
|
123
|
+
@value[offset, count] = ''
|
124
|
+
end
|
125
|
+
|
126
|
+
=begin
|
127
|
+
--- CharacterData#replaceData(offset, count, str)
|
128
|
+
|
129
|
+
[DOM]
|
130
|
+
replaces the characters starting at the specified character offset
|
131
|
+
with specified string.
|
132
|
+
=end
|
133
|
+
## [DOM]
|
134
|
+
def replaceData(offset, count, str)
|
135
|
+
if offset < 0 || offset > @value.length || count < 0
|
136
|
+
raise DOMException.new(DOMException::INDEX_SIZE_ERR)
|
137
|
+
end
|
138
|
+
@value[offset, count] = str
|
139
|
+
end
|
140
|
+
|
141
|
+
=begin
|
142
|
+
--- CharacterData#cloneData(deep = true)
|
143
|
+
|
144
|
+
[DOM]
|
145
|
+
returns the copy of the CharacterData.
|
146
|
+
=end
|
147
|
+
## [DOM]
|
148
|
+
def cloneNode(deep = true)
|
149
|
+
super(deep, @value.dup)
|
150
|
+
end
|
151
|
+
|
152
|
+
=begin
|
153
|
+
--- CharacterData#nodeValue
|
154
|
+
|
155
|
+
[DOM]
|
156
|
+
return nodevalue.
|
157
|
+
|
158
|
+
=end
|
159
|
+
## [DOM]
|
160
|
+
def nodeValue
|
161
|
+
@value
|
162
|
+
end
|
163
|
+
|
164
|
+
=begin
|
165
|
+
--- CharacterData#nodeValue=(p)
|
166
|
+
|
167
|
+
[DOM]
|
168
|
+
set nodevalue as p.
|
169
|
+
=end
|
170
|
+
## [DOM]
|
171
|
+
def nodeValue=(p)
|
172
|
+
@value = p
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
## -*- Ruby -*-
|
2
|
+
## XML::DOM
|
3
|
+
## 1998-2001 by yoshidam
|
4
|
+
##
|
5
|
+
|
6
|
+
require 'xml/dom2/characterdata'
|
7
|
+
|
8
|
+
module XML
|
9
|
+
module DOM
|
10
|
+
|
11
|
+
=begin
|
12
|
+
== Class XML::DOM::Comment
|
13
|
+
|
14
|
+
=== superclass
|
15
|
+
CharacterData
|
16
|
+
|
17
|
+
=end
|
18
|
+
class Comment<CharacterData
|
19
|
+
|
20
|
+
=begin
|
21
|
+
=== Class Methods
|
22
|
+
|
23
|
+
--- Comment.new(text)
|
24
|
+
|
25
|
+
creates a new Comment.
|
26
|
+
=end
|
27
|
+
## new(text)
|
28
|
+
## text: String
|
29
|
+
def initialize(text = nil)
|
30
|
+
super(text)
|
31
|
+
raise "parameter error" if !text
|
32
|
+
end
|
33
|
+
|
34
|
+
=begin
|
35
|
+
=== Methods
|
36
|
+
|
37
|
+
--- Comment#nodeType
|
38
|
+
|
39
|
+
[DOM]
|
40
|
+
returns the nodeType.
|
41
|
+
=end
|
42
|
+
## [DOM]
|
43
|
+
def nodeType
|
44
|
+
COMMENT_NODE
|
45
|
+
end
|
46
|
+
|
47
|
+
=begin
|
48
|
+
--- Comment#nodeName
|
49
|
+
|
50
|
+
[DOM]
|
51
|
+
returns the nodeName.
|
52
|
+
=end
|
53
|
+
## [DOM]
|
54
|
+
def nodeName
|
55
|
+
"#comment"
|
56
|
+
end
|
57
|
+
|
58
|
+
=begin
|
59
|
+
--- Comment#to_s
|
60
|
+
|
61
|
+
returns the string representation of the Comment.
|
62
|
+
=end
|
63
|
+
def to_s
|
64
|
+
ret = "<!--#{@value}-->"
|
65
|
+
ret << "\n" if parentNode.nodeType == DOCUMENT_NODE
|
66
|
+
ret
|
67
|
+
end
|
68
|
+
|
69
|
+
=begin
|
70
|
+
--- Comment#dump(depth =0)
|
71
|
+
|
72
|
+
dumps the Comment.
|
73
|
+
=end
|
74
|
+
def dump(depth = 0)
|
75
|
+
print ' ' * depth * 2
|
76
|
+
print "<!--#{@value.inspect}-->\n"
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'xml/dom2/domexception'
|
2
|
+
require 'xml/dom2/domimplementation'
|
3
|
+
require 'xml/dom2/documentfragment'
|
4
|
+
require 'xml/dom2/document'
|
5
|
+
require 'xml/dom2/node'
|
6
|
+
require 'xml/dom2/nodelist'
|
7
|
+
require 'xml/dom2/namednodemap'
|
8
|
+
require 'xml/dom2/characterdata'
|
9
|
+
require 'xml/dom2/attr'
|
10
|
+
require 'xml/dom2/element'
|
11
|
+
require 'xml/dom2/text'
|
12
|
+
require 'xml/dom2/comment'
|
13
|
+
|
14
|
+
require 'xml/dom2/cdatasection'
|
15
|
+
require 'xml/dom2/documenttype'
|
16
|
+
require 'xml/dom2/notation'
|
17
|
+
require 'xml/dom2/entity'
|
18
|
+
require 'xml/dom2/entityreference'
|
19
|
+
require 'xml/dom2/processinginstruction'
|
@@ -0,0 +1,317 @@
|
|
1
|
+
## -*- Ruby -*-
|
2
|
+
## XML::DOM
|
3
|
+
## 1998-2001 by yoshidam
|
4
|
+
##
|
5
|
+
|
6
|
+
require 'xml/dom2/node'
|
7
|
+
require 'xml/dom2/nodelist'
|
8
|
+
require 'xml/dom2/domexception'
|
9
|
+
|
10
|
+
require 'xml/dom2/documentfragment'
|
11
|
+
require 'xml/dom2/attr'
|
12
|
+
require 'xml/dom2/element'
|
13
|
+
require 'xml/dom2/text'
|
14
|
+
require 'xml/dom2/comment'
|
15
|
+
require 'xml/dom2/cdatasection'
|
16
|
+
require 'xml/dom2/entityreference'
|
17
|
+
require 'xml/dom2/processinginstruction'
|
18
|
+
require 'xml/dom2/domimplementation'
|
19
|
+
|
20
|
+
|
21
|
+
module XML
|
22
|
+
module DOM
|
23
|
+
|
24
|
+
=begin
|
25
|
+
== Class XML::DOM::Document
|
26
|
+
|
27
|
+
=== superclass
|
28
|
+
Node
|
29
|
+
|
30
|
+
=end
|
31
|
+
class Document<Node
|
32
|
+
=begin
|
33
|
+
=== Class Methods
|
34
|
+
--- Document.new(*children)
|
35
|
+
|
36
|
+
creates a new Document.
|
37
|
+
=end
|
38
|
+
|
39
|
+
## new([child1, child2, ...]) or
|
40
|
+
## new(child1, child2, ...)
|
41
|
+
## child?: String or Node
|
42
|
+
def initialize(*children)
|
43
|
+
super(*children)
|
44
|
+
end
|
45
|
+
|
46
|
+
=begin
|
47
|
+
=== Methods
|
48
|
+
|
49
|
+
--- Document#nodeType
|
50
|
+
|
51
|
+
[DOM]
|
52
|
+
returns the nodeType.
|
53
|
+
=end
|
54
|
+
## [DOM]
|
55
|
+
def nodeType
|
56
|
+
DOCUMENT_NODE
|
57
|
+
end
|
58
|
+
|
59
|
+
=begin
|
60
|
+
--- Document#nodeName
|
61
|
+
|
62
|
+
[DOM]
|
63
|
+
returns the nodeName.
|
64
|
+
=end
|
65
|
+
## [DOM]
|
66
|
+
def nodeName
|
67
|
+
"#document"
|
68
|
+
end
|
69
|
+
|
70
|
+
=begin
|
71
|
+
--- Document#documentElement
|
72
|
+
|
73
|
+
[DOM]
|
74
|
+
returns root element of the Docuemnt.
|
75
|
+
=end
|
76
|
+
## [DOM]
|
77
|
+
def documentElement
|
78
|
+
@children.each do |child|
|
79
|
+
if child.nodeType == ELEMENT_NODE
|
80
|
+
return child
|
81
|
+
end
|
82
|
+
end if @children
|
83
|
+
nil
|
84
|
+
end
|
85
|
+
|
86
|
+
=begin
|
87
|
+
--- Document#doctype
|
88
|
+
|
89
|
+
[DOM]
|
90
|
+
returns DTD associated with this document.
|
91
|
+
=end
|
92
|
+
## [DOM]
|
93
|
+
def doctype
|
94
|
+
@children.each do |child|
|
95
|
+
if child.nodeType == DOCUMENT_TYPE_NODE
|
96
|
+
return child
|
97
|
+
end
|
98
|
+
end if @children
|
99
|
+
nil
|
100
|
+
end
|
101
|
+
|
102
|
+
=begin
|
103
|
+
--- Document#getElementsByTagName(tagname)
|
104
|
+
|
105
|
+
[DOM]
|
106
|
+
returns a NodeList of all the Elements with a given tag name.
|
107
|
+
=end
|
108
|
+
## [DOM] (but this is not "live")
|
109
|
+
def getElementsByTagName(tagname)
|
110
|
+
ret = NodeList.new
|
111
|
+
@children.each do |node|
|
112
|
+
if node.nodeType == ELEMENT_NODE
|
113
|
+
if tagname == '*' || node.nodeName == tagname
|
114
|
+
ret << node
|
115
|
+
end
|
116
|
+
ret << node.getElementsByTagName(tagname)
|
117
|
+
end
|
118
|
+
end if @children
|
119
|
+
ret
|
120
|
+
end
|
121
|
+
|
122
|
+
=begin
|
123
|
+
--- Document#createElement(tagName)
|
124
|
+
|
125
|
+
[DOM]
|
126
|
+
creates a Element.
|
127
|
+
=end
|
128
|
+
## [DOM]
|
129
|
+
def createElement(tagName)
|
130
|
+
ret = Element.new(tagName)
|
131
|
+
ret.ownerDocument = self
|
132
|
+
ret
|
133
|
+
end
|
134
|
+
|
135
|
+
=begin
|
136
|
+
--- Document#createTextNode(data)
|
137
|
+
|
138
|
+
[DOM]
|
139
|
+
creates a TextNode.
|
140
|
+
=end
|
141
|
+
## [DOM]
|
142
|
+
def createTextNode(data)
|
143
|
+
ret = Text.new(data)
|
144
|
+
ret.ownerDocument = self
|
145
|
+
ret
|
146
|
+
end
|
147
|
+
|
148
|
+
=begin
|
149
|
+
--- Document#createCDATASection(data)
|
150
|
+
|
151
|
+
[DOM]
|
152
|
+
creates a CDATASection.
|
153
|
+
=end
|
154
|
+
## [DOM]
|
155
|
+
def createCDATASection(data)
|
156
|
+
ret = CDATASection.new(data)
|
157
|
+
ret.ownerDocument = self
|
158
|
+
ret
|
159
|
+
end
|
160
|
+
|
161
|
+
=begin
|
162
|
+
--- Document#createComment(data)
|
163
|
+
|
164
|
+
[DOM]
|
165
|
+
create a Comment.
|
166
|
+
=end
|
167
|
+
## [DOM]
|
168
|
+
def createComment(data)
|
169
|
+
ret = Comment.new(data)
|
170
|
+
ret.ownerDocument = self
|
171
|
+
ret
|
172
|
+
end
|
173
|
+
|
174
|
+
=begin
|
175
|
+
--- Document#createProcessingInstruction(target, data)
|
176
|
+
|
177
|
+
[DOM]
|
178
|
+
create a ProcessingInstruction.
|
179
|
+
=end
|
180
|
+
## [DOM]
|
181
|
+
def createProcessingInstruction(target, data)
|
182
|
+
ret = ProcessingInstruction.new(target, data)
|
183
|
+
ret.ownerDocument = self
|
184
|
+
ret
|
185
|
+
end
|
186
|
+
|
187
|
+
=begin
|
188
|
+
--- Document#createAttribute(name)
|
189
|
+
|
190
|
+
[DOM]
|
191
|
+
create a Attribute.
|
192
|
+
=end
|
193
|
+
## [DOM]
|
194
|
+
def createAttribute(name)
|
195
|
+
ret = Attr.new(name)
|
196
|
+
ret.ownerDocument = self
|
197
|
+
ret
|
198
|
+
end
|
199
|
+
|
200
|
+
=begin
|
201
|
+
--- Document#createEntityReference(name)
|
202
|
+
|
203
|
+
[DOM]
|
204
|
+
create a EntityReference.
|
205
|
+
=end
|
206
|
+
## [DOM]
|
207
|
+
def createEntityReference(name)
|
208
|
+
ret = EntityReference.new(name)
|
209
|
+
ret.ownerDocument = self
|
210
|
+
ret
|
211
|
+
end
|
212
|
+
|
213
|
+
=begin
|
214
|
+
--- Document#createDocumentFragment()
|
215
|
+
|
216
|
+
[DOM]
|
217
|
+
create a DocumentFragment.
|
218
|
+
=end
|
219
|
+
## [DOM]
|
220
|
+
def createDocumentFragment
|
221
|
+
ret = DocumentFragment.new
|
222
|
+
ret.ownerDocument = self
|
223
|
+
ret
|
224
|
+
end
|
225
|
+
|
226
|
+
## [DOM]
|
227
|
+
def implementation
|
228
|
+
return @implemantation if @implemantation
|
229
|
+
## singleton
|
230
|
+
@implemantation = DOMImplementation.instance
|
231
|
+
end
|
232
|
+
|
233
|
+
def implementation=(impl)
|
234
|
+
@implemantation = impl
|
235
|
+
end
|
236
|
+
|
237
|
+
## [DOM2]
|
238
|
+
def importNode(impnode, deep)
|
239
|
+
## [NOT IMPLEMENTED]
|
240
|
+
raise "not implemented"
|
241
|
+
end
|
242
|
+
|
243
|
+
=begin
|
244
|
+
--- Document#createElementNS(nsuri, qname)
|
245
|
+
|
246
|
+
[DOM2]
|
247
|
+
creates a Element with namespace.
|
248
|
+
=end
|
249
|
+
## [DOM2]
|
250
|
+
def createElementNS(nsuri, qname)
|
251
|
+
ret = Element.new([nsuri, qname])
|
252
|
+
ret.ownerDocument = self
|
253
|
+
ret
|
254
|
+
end
|
255
|
+
|
256
|
+
XMLNSNS = 'http://www.w3.org/2000/xmlns/'
|
257
|
+
## [DOM2]
|
258
|
+
def createAttributeNS(nsuri, qname)
|
259
|
+
nsuri = XMLNSNS if qname == 'xmlns' or qname =~ /^xmlns:/u
|
260
|
+
ret = Attr.new([nsuri, qname])
|
261
|
+
ret.ownerDocument = self
|
262
|
+
ret
|
263
|
+
end
|
264
|
+
|
265
|
+
## [DOM2]
|
266
|
+
def getElementsByTagNameNS(nsuri, localname)
|
267
|
+
ret = NodeList.new
|
268
|
+
@children.each do |node|
|
269
|
+
if node.nodeType == ELEMENT_NODE
|
270
|
+
if (localname == '*' || node.localname == localname) and
|
271
|
+
(nsuri == '*' || node.namespaceURI == nsuri)
|
272
|
+
ret << node
|
273
|
+
end
|
274
|
+
ret << node.getElementsByTagNameNS(nsuri, localname)
|
275
|
+
end
|
276
|
+
end if @children
|
277
|
+
ret
|
278
|
+
end
|
279
|
+
|
280
|
+
## [DOM2]
|
281
|
+
def getElementById(elementId)
|
282
|
+
## [NOT IMPLEMENTED]
|
283
|
+
raise "not implemented"
|
284
|
+
end
|
285
|
+
|
286
|
+
def _checkNode(node)
|
287
|
+
unless node.nodeType == ELEMENT_NODE ||
|
288
|
+
node.nodeType == PROCESSING_INSTRUCTION_NODE ||
|
289
|
+
node.nodeType == COMMENT_NODE ||
|
290
|
+
node.nodeType == DOCUMENT_TYPE_NODE
|
291
|
+
raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR)
|
292
|
+
end
|
293
|
+
|
294
|
+
if node.nodeType == ELEMENT_NODE
|
295
|
+
@children.each do |n|
|
296
|
+
if n.nodeType == ELEMENT_NODE
|
297
|
+
raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR)
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
if node.nodeType == DOCUMENT_TYPE_NODE
|
303
|
+
@children.each do |n|
|
304
|
+
if n.nodeType == DOCUMENT_TYPE_NODE
|
305
|
+
raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR)
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def _getNamespaces(parentNamespaces = {}, all = false)
|
312
|
+
{ nil => nil }
|
313
|
+
end
|
314
|
+
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|