xmlparser 0.6.81
Sign up to get free protection for your applications and to get access to all the features.
- 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
|