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,82 @@
|
|
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::DocumentFragment
|
14
|
+
|
15
|
+
=== superclass
|
16
|
+
Node
|
17
|
+
|
18
|
+
=end
|
19
|
+
class DocumentFragment<Node
|
20
|
+
|
21
|
+
=begin
|
22
|
+
=== Class Methods
|
23
|
+
|
24
|
+
--- DocumentFragment.new(*children)
|
25
|
+
|
26
|
+
creates a new DocumentFragment.
|
27
|
+
=end
|
28
|
+
|
29
|
+
def initialize(*children)
|
30
|
+
super(*children)
|
31
|
+
end
|
32
|
+
|
33
|
+
=begin
|
34
|
+
=== Methods
|
35
|
+
|
36
|
+
--- DocumentFragment#nodeType
|
37
|
+
|
38
|
+
[DOM]
|
39
|
+
returns the nodeType.
|
40
|
+
=end
|
41
|
+
## [DOM]
|
42
|
+
def nodeType
|
43
|
+
DOCUMENT_FRAGMENT_NODE
|
44
|
+
end
|
45
|
+
|
46
|
+
=begin
|
47
|
+
--- DocumentFragment#nodeName
|
48
|
+
|
49
|
+
[DOM]
|
50
|
+
returns the nodeName.
|
51
|
+
=end
|
52
|
+
## [DOM]
|
53
|
+
def nodeName
|
54
|
+
"#document-fragment"
|
55
|
+
end
|
56
|
+
|
57
|
+
=begin
|
58
|
+
--- DocumentFragment#parentNode=(p)
|
59
|
+
|
60
|
+
returns the parent of this node.
|
61
|
+
=end
|
62
|
+
## DocumentFragment should not have the parent node.
|
63
|
+
# def parentNode=(p)
|
64
|
+
# @children.each do |child|
|
65
|
+
# child.parentNode = p
|
66
|
+
# end if @children
|
67
|
+
# end
|
68
|
+
|
69
|
+
def _checkNode(node)
|
70
|
+
unless node.nodeType == ELEMENT_NODE ||
|
71
|
+
node.nodeType == PROCESSING_INSTRUCTION_NODE ||
|
72
|
+
node.nodeType == COMMENT_NODE ||
|
73
|
+
node.nodeType == TEXT_NODE ||
|
74
|
+
node.nodeType == CDATA_SECTION_NODE ||
|
75
|
+
node.nodeType == ENTITY_REFERENCE_NODE
|
76
|
+
raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
## -*- Ruby -*-
|
2
|
+
## XML::DOM
|
3
|
+
## 1998-2001 by yoshidam
|
4
|
+
##
|
5
|
+
|
6
|
+
require 'xml/dom2/node'
|
7
|
+
|
8
|
+
module XML
|
9
|
+
module DOM
|
10
|
+
|
11
|
+
=begin
|
12
|
+
== Class XML::DOM::DocumentType
|
13
|
+
|
14
|
+
=== superclass
|
15
|
+
Node
|
16
|
+
=end
|
17
|
+
class DocumentType<Node
|
18
|
+
|
19
|
+
=begin
|
20
|
+
=== Class Methods
|
21
|
+
|
22
|
+
--- DocumentType.new(name, pubid, sysid, *children)
|
23
|
+
|
24
|
+
creates a new DocuemntType.
|
25
|
+
=end
|
26
|
+
def initialize(name, pubid, sysid, *children)
|
27
|
+
super(*children)
|
28
|
+
raise "parameter error" if !name
|
29
|
+
@name = name.freeze
|
30
|
+
@pubid = pubid.freeze
|
31
|
+
@sysid = sysid.freeze
|
32
|
+
end
|
33
|
+
|
34
|
+
=begin
|
35
|
+
=== Methods
|
36
|
+
|
37
|
+
--- DocumentType#nodeType
|
38
|
+
|
39
|
+
[DOM]
|
40
|
+
returns the nodeType.
|
41
|
+
=end
|
42
|
+
## [DOM]
|
43
|
+
def nodeType
|
44
|
+
DOCUMENT_TYPE_NODE
|
45
|
+
end
|
46
|
+
|
47
|
+
=begin
|
48
|
+
--- DocumentType#nodeName
|
49
|
+
|
50
|
+
[DOM]
|
51
|
+
returns the nodeName.
|
52
|
+
=end
|
53
|
+
## [DOM]
|
54
|
+
def nodeName
|
55
|
+
@name
|
56
|
+
end
|
57
|
+
|
58
|
+
=begin
|
59
|
+
--- DocumentType#to_s
|
60
|
+
|
61
|
+
returns the string representation of the DocumentType.
|
62
|
+
=end
|
63
|
+
def to_s
|
64
|
+
""
|
65
|
+
end
|
66
|
+
|
67
|
+
=begin
|
68
|
+
--- DocumentType#dump(depth = 0)
|
69
|
+
|
70
|
+
dumps the DocumentType.
|
71
|
+
=end
|
72
|
+
def dump(depth = 0)
|
73
|
+
print ' ' * depth * 2
|
74
|
+
print "<!DOCTYPE #{@name}>\n"
|
75
|
+
end
|
76
|
+
|
77
|
+
=begin
|
78
|
+
--- DocumentType#cloneNode(deep = true)
|
79
|
+
|
80
|
+
[DOM]
|
81
|
+
returns the copy of the DocumentType.
|
82
|
+
=end
|
83
|
+
## [DOM]
|
84
|
+
def cloneNode(deep = true)
|
85
|
+
super(deep, @name, @pubid, @sysid)
|
86
|
+
end
|
87
|
+
|
88
|
+
## [DOM]
|
89
|
+
## def entities; @entities; end
|
90
|
+
## def notations; @notations; end
|
91
|
+
|
92
|
+
## [DOM2]
|
93
|
+
def publicId; @pubid; end
|
94
|
+
|
95
|
+
## [DOM2]
|
96
|
+
def systemId; @sysid; end
|
97
|
+
|
98
|
+
## [DOM2]
|
99
|
+
def internalSubset; end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,277 @@
|
|
1
|
+
## -*- Ruby -*-
|
2
|
+
## XML::DOM::DOMBuilder
|
3
|
+
## 1999-2001 by yoshidam
|
4
|
+
##
|
5
|
+
##
|
6
|
+
## builder = XML::DOM::DOMImplementation.instance.createDOMBuilder
|
7
|
+
## doc = builder.parseURI("http://hoge/hoge.xml")
|
8
|
+
## inputSource = XML::DOM::InputSource.new("http://hoge/hoge.xml")
|
9
|
+
## doc = builder.parseDOMInputSource(inputSource)
|
10
|
+
##
|
11
|
+
##
|
12
|
+
|
13
|
+
require 'xml/parserns'
|
14
|
+
require 'xml/dom2/document'
|
15
|
+
require 'xml/dom2/domentityresolverimpl'
|
16
|
+
|
17
|
+
=begin
|
18
|
+
= XML::DOM::DOMBuilder
|
19
|
+
|
20
|
+
=end
|
21
|
+
module XML
|
22
|
+
module DOM
|
23
|
+
|
24
|
+
=begin
|
25
|
+
== Class XML::DOM::DOMBuilder
|
26
|
+
|
27
|
+
=== superclass
|
28
|
+
XML::Parser
|
29
|
+
|
30
|
+
=end
|
31
|
+
class DOMBuilder<XML::ParserNS
|
32
|
+
NSSEP = '!'
|
33
|
+
|
34
|
+
attr :createCDATASection, true
|
35
|
+
attr :createEntityReference, true
|
36
|
+
|
37
|
+
=begin
|
38
|
+
=== Class Methods
|
39
|
+
|
40
|
+
--- DOM::DOMBuilder.new(document = nil, *args)
|
41
|
+
|
42
|
+
Constructor of DOM builder.
|
43
|
+
|
44
|
+
usage:
|
45
|
+
parser = XML::DOM::DOMBuilder.new(document)
|
46
|
+
|
47
|
+
=end
|
48
|
+
## new(document = nil, encoding = nil)
|
49
|
+
## new(document = nil, parser, context, encoding = nil)
|
50
|
+
|
51
|
+
def self.new(document = nil, *args)
|
52
|
+
document ||= Document.new
|
53
|
+
if args[0].is_a?(self.class)
|
54
|
+
ret = super(*args)
|
55
|
+
ret.__initialize__(document, true)
|
56
|
+
else
|
57
|
+
ret = super(args[0], NSSEP)
|
58
|
+
ret.__initialize__(document, false)
|
59
|
+
end
|
60
|
+
ret.setReturnNSTriplet(true)
|
61
|
+
ret
|
62
|
+
end
|
63
|
+
|
64
|
+
def __initialize__(document, external = false)
|
65
|
+
@tree = nil
|
66
|
+
@entityResolver = DOMEntityResolverImpl.new
|
67
|
+
@createCDATASection = false
|
68
|
+
@createEntityReference = false
|
69
|
+
@document = document
|
70
|
+
@external = external
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
=begin
|
75
|
+
=== Methods
|
76
|
+
--- DOMBuilder#parse(xml, parse_ext = false)
|
77
|
+
|
78
|
+
parse string or stream of XML contents.
|
79
|
+
|
80
|
+
xml: string or stream of XML contents
|
81
|
+
parse_ext: flag whether parse external entities or not
|
82
|
+
|
83
|
+
ex. doctree = parser.parse(xml, parse_ext)
|
84
|
+
|
85
|
+
=end
|
86
|
+
## Parse
|
87
|
+
## doctree = parser.parse(xml, parse_ext)
|
88
|
+
## xml: string or stream of XML contents
|
89
|
+
## parse_ext: flag whether parse external entities or not
|
90
|
+
def parse(xml, parse_ext = false)
|
91
|
+
if @external
|
92
|
+
@tree = @document.createDocumentFragment
|
93
|
+
else
|
94
|
+
@tree = @document
|
95
|
+
end
|
96
|
+
@parse_ext = parse_ext
|
97
|
+
@current = @tree
|
98
|
+
@inDocDecl = 0
|
99
|
+
@decl = ""
|
100
|
+
@inDecl = 0
|
101
|
+
@idRest = 0
|
102
|
+
@extID = nil
|
103
|
+
@cdata_f = false
|
104
|
+
@cdata_buf = ''
|
105
|
+
@nsdecl = []
|
106
|
+
super(xml)
|
107
|
+
@tree
|
108
|
+
end
|
109
|
+
|
110
|
+
def parseURI(uri)
|
111
|
+
uri =~ /^((\w+):\/\/.+\/).*$/ ## /
|
112
|
+
setBase($1) if $1
|
113
|
+
xml = @entityResolver.resolveEntity(nil, uri).byteStream.read
|
114
|
+
parse(xml, true)
|
115
|
+
end
|
116
|
+
|
117
|
+
def text
|
118
|
+
return if @cdata_buf == ''
|
119
|
+
textnode = @document.createTextNode(@cdata_buf)
|
120
|
+
@current.appendChild(textnode)
|
121
|
+
@cdata_buf = ''
|
122
|
+
end
|
123
|
+
|
124
|
+
def startElement(name, data)
|
125
|
+
text
|
126
|
+
if !name.index(NSSEP)
|
127
|
+
qname = name
|
128
|
+
uri = nil
|
129
|
+
else
|
130
|
+
uri, localname, prefix = name.split(NSSEP)
|
131
|
+
if prefix.nil?
|
132
|
+
qname = localname
|
133
|
+
else
|
134
|
+
qname = prefix + ':' + localname
|
135
|
+
end
|
136
|
+
end
|
137
|
+
elem = @document.createElementNS(uri, qname)
|
138
|
+
|
139
|
+
@nsdecl.each do |nsdecl|
|
140
|
+
elem.setAttributeNode(nsdecl)
|
141
|
+
end
|
142
|
+
@nsdecl = []
|
143
|
+
|
144
|
+
attr = {}
|
145
|
+
specified = getSpecifiedAttributes
|
146
|
+
## not implemented
|
147
|
+
## elem.idAttribute = getIdAttribute
|
148
|
+
|
149
|
+
data.each do |key, value|
|
150
|
+
if !key.index(NSSEP)
|
151
|
+
qname = key
|
152
|
+
uri = nil
|
153
|
+
else
|
154
|
+
uri, localname, prefix = key.split(NSSEP)
|
155
|
+
if prefix.nil?
|
156
|
+
qname = localname
|
157
|
+
else
|
158
|
+
qname = prefix + ':' + localname
|
159
|
+
end
|
160
|
+
end
|
161
|
+
attr = @document.createAttributeNS(uri, qname)
|
162
|
+
attr.appendChild(@document.createTextNode(value))
|
163
|
+
## attr.specified = specified[key]
|
164
|
+
attr.specified = specified.include?(key)
|
165
|
+
elem.setAttributeNode(attr)
|
166
|
+
end
|
167
|
+
|
168
|
+
@current.appendChild(elem)
|
169
|
+
@current = elem
|
170
|
+
end
|
171
|
+
|
172
|
+
def endElement(name)
|
173
|
+
text
|
174
|
+
@current = @current.parentNode
|
175
|
+
end
|
176
|
+
|
177
|
+
def character(data)
|
178
|
+
## if @cdata_f
|
179
|
+
@cdata_buf << data
|
180
|
+
## else
|
181
|
+
## cdata = @document.createTextNode(data)
|
182
|
+
## @current.appendChild(cdata)
|
183
|
+
## end
|
184
|
+
end
|
185
|
+
|
186
|
+
def processingInstruction(name, data)
|
187
|
+
text
|
188
|
+
pi = @document.createProcessingInstruction(name, data)
|
189
|
+
@current.appendChild(pi)
|
190
|
+
end
|
191
|
+
|
192
|
+
def externalEntityRef(context, base, systemId, publicId)
|
193
|
+
text
|
194
|
+
tree = nil
|
195
|
+
if @parse_ext
|
196
|
+
extp = self.class.new(@document, self, context)
|
197
|
+
extp.setBase(base) if base
|
198
|
+
file = systemId
|
199
|
+
if systemId !~ /^\/|^\.|^http:|^ftp:/ && !base.nil? # /
|
200
|
+
file = base + systemId
|
201
|
+
end
|
202
|
+
begin
|
203
|
+
xml = @entityResolver.resolveEntity(nil, file).byteStream.read
|
204
|
+
tree = extp.parse(xml, @parse_ext)
|
205
|
+
rescue XML::Parser::Error
|
206
|
+
raise XML::Parser::Error.new("#{systemId}(#{extp.line}): #{$!}")
|
207
|
+
rescue Errno::ENOENT
|
208
|
+
raise
|
209
|
+
end
|
210
|
+
extp.done
|
211
|
+
end
|
212
|
+
if @createEntityReference
|
213
|
+
entref = @document.createEntityReference(context)
|
214
|
+
@current.appendChild(entref)
|
215
|
+
entref.appendChild(tree) if tree
|
216
|
+
else
|
217
|
+
@current.appendChild(tree) if tree
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def startCdata
|
222
|
+
return unless @createCDATASection
|
223
|
+
text
|
224
|
+
@cdata_f = true
|
225
|
+
## @cdata_buf = ''
|
226
|
+
end
|
227
|
+
|
228
|
+
def endCdata
|
229
|
+
return unless @createCDATASection
|
230
|
+
cdata = @document.createCDATASection(@cdata_buf)
|
231
|
+
@current.appendChild(cdata)
|
232
|
+
@cdata_buf = ''
|
233
|
+
@cdata_f = false
|
234
|
+
end
|
235
|
+
|
236
|
+
def comment(data)
|
237
|
+
text
|
238
|
+
comment = @document.createComment(data)
|
239
|
+
@current.appendChild(comment)
|
240
|
+
end
|
241
|
+
|
242
|
+
def startDoctypeDecl(name, pubid, sysid, internal_subset)
|
243
|
+
doctype = @document.implementation.createDocumentType(name,
|
244
|
+
pubid, sysid)
|
245
|
+
@current.appendChild(doctype)
|
246
|
+
end
|
247
|
+
|
248
|
+
def startNamespaceDecl(prefix, uri)
|
249
|
+
qname = 'xmlns'
|
250
|
+
if prefix
|
251
|
+
qname << ':' + prefix
|
252
|
+
end
|
253
|
+
attr = @document.createAttributeNS(nil, qname)
|
254
|
+
attr.appendChild(@document.createTextNode(uri))
|
255
|
+
attr.specified = true
|
256
|
+
@nsdecl << attr
|
257
|
+
end
|
258
|
+
|
259
|
+
## def endNamespaceDecl(prefix, uri)
|
260
|
+
## end
|
261
|
+
|
262
|
+
## def defaultHandler(data)
|
263
|
+
## end
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
## [DOM3?]
|
268
|
+
def entityResolver; @entityResolver; end
|
269
|
+
def entityResolver=(resolver)
|
270
|
+
raise ArgumentError, 'invalid value for DOMEntityResolver' unless
|
271
|
+
resolver.is_a?(DOMEntityResolver)
|
272
|
+
@entityResolver = resolver
|
273
|
+
end
|
274
|
+
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|