Class: Rexle
Defined Under Namespace
Classes: CData, Comment, Element, Elements, Recordset
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from XMLhelper
#doc_pretty_print, #doc_print, #inspect, #pretty_print, #processing_instructions, #scan_print, #scan_to_a
Constructor Details
#initialize(x = nil, rexle: self, debug: false) ⇒ Rexle
Returns a new instance of Rexle.
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
# File 'lib/rexle.rb', line 199
def initialize(x=nil, rexle: self, debug: false)
@rexle, @debug = rexle, debug
puts 'inside Rexle' if debug
super()
@instructions = [["xml", "version='1.0' encoding='UTF-8'"]]
@doctype = :xml
if x then
procs = {
String: proc {|x| parse_string(x)},
Array: proc {|x| x},
RexleParser: ->(x){ parse_rexle(x)}
}
doc_node = ['doc', Attributes.new]
@a = procs[x.class.to_s.to_sym].call(x)
@doc = scan_element(*(doc_node << @a))
@prefixes = []
if @doc.root.attributes then
xmlns = @doc.root.attributes.select {|k,v| k[/^xmlns:/]}
@prefixes = xmlns.keys.map{|x| x[/\w+$/]}
end
end
end
|
Instance Attribute Details
#doctype ⇒ Object
Returns the value of attribute doctype.
196
197
198
|
# File 'lib/rexle.rb', line 196
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
197
198
199
|
# File 'lib/rexle.rb', line 197
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
196
197
198
|
# File 'lib/rexle.rb', line 196
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1400
|
# File 'lib/rexle.rb', line 1400
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
|
# File 'lib/rexle.rb', line 1404
def add_element(element)
if @doc then
raise 'attempted adding second root element to document' if @doc.root
@doc.root.add_element(element)
else
doc_node = ['doc', Attributes.new, element.to_a]
@doc = scan_element(*doc_node)
end
element
end
|
#add_text(s) ⇒ Object
1416
|
# File 'lib/rexle.rb', line 1416
def add_text(s) end
|
#at_css(selector) ⇒ Object
241
242
243
|
# File 'lib/rexle.rb', line 241
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1401
|
# File 'lib/rexle.rb', line 1401
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1402
|
# File 'lib/rexle.rb', line 1402
def attributes() @doc.attributes end
|
#clone ⇒ Object
237
238
239
|
# File 'lib/rexle.rb', line 237
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1466
1467
1468
|
# File 'lib/rexle.rb', line 1466
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
245
246
247
248
249
250
251
252
253
254
|
# File 'lib/rexle.rb', line 245
def css(selector)
a = selector.split(',').flat_map do |x|
@doc.root.xpath RexleCSS.new(x).to_xpath
end
a.shift if self.kind_of? Rexle
return a
end
|
#delete(xpath) ⇒ Object
Also known as:
remove
1420
1421
1422
1423
1424
|
# File 'lib/rexle.rb', line 1420
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete; e = nil }
end
|
#element(xpath) ⇒ Object
1428
|
# File 'lib/rexle.rb', line 1428
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1429
|
# File 'lib/rexle.rb', line 1429
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1430
|
# File 'lib/rexle.rb', line 1430
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
|
# File 'lib/rexle.rb', line 1379
def parse(x=nil)
a = []
if x then
procs = {
String: proc {|x| parse_string(x)},
Array: proc {|x| x}
}
a = procs[x.class.to_s.to_sym].call(x)
else
a = yield
end
doc_node = ['doc',Attributes.new]
@a = procs[x.class.to_s.to_sym].call(x)
@doc = scan_element(*(doc_node << @a))
self
end
|
#root ⇒ Object
1439
1440
1441
|
# File 'lib/rexle.rb', line 1439
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1438
|
# File 'lib/rexle.rb', line 1438
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1431
|
# File 'lib/rexle.rb', line 1431
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1433
1434
1435
1436
|
# File 'lib/rexle.rb', line 1433
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1443
1444
1445
|
# File 'lib/rexle.rb', line 1443
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
|
# File 'lib/rexle.rb', line 1447
def xml(options={})
return '' unless @doc
o = {pretty: false, declaration: true}.merge(options)
msg = o[:pretty] == false ? :doc_print : :doc_pretty_print
r = ''
if o[:declaration] == true then
unless @instructions.assoc 'xml' then
@instructions.unshift ["xml","version='1.0' encoding='UTF-8'"]
end
end
r << method(msg).call(self.root.children, o[:declaration]).strip
r
end
|
#xpath(path, &blk) ⇒ Object
256
257
258
|
# File 'lib/rexle.rb', line 256
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|