Class: Rexle
Defined Under Namespace
Classes: CData, Comment, Element, Elements
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
Returns a new instance of Rexle.
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
|
# File 'lib/rexle.rb', line 318
def initialize(x=nil)
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.
315
316
317
|
# File 'lib/rexle.rb', line 315
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
316
317
318
|
# File 'lib/rexle.rb', line 316
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
315
316
317
|
# File 'lib/rexle.rb', line 315
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1343
|
# File 'lib/rexle.rb', line 1343
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
|
# File 'lib/rexle.rb', line 1347
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
1359
|
# File 'lib/rexle.rb', line 1359
def add_text(s) end
|
#at_css(selector) ⇒ Object
355
356
357
|
# File 'lib/rexle.rb', line 355
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1344
|
# File 'lib/rexle.rb', line 1344
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1345
|
# File 'lib/rexle.rb', line 1345
def attributes() @doc.attributes end
|
#clone ⇒ Object
351
352
353
|
# File 'lib/rexle.rb', line 351
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1409
1410
1411
|
# File 'lib/rexle.rb', line 1409
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
359
360
361
|
# File 'lib/rexle.rb', line 359
def css(selector)
selector.split(',').flat_map{|x| @doc.root.xpath RexleCSS.new(x).to_xpath}
end
|
#delete(xpath) ⇒ Object
Also known as:
remove
1363
1364
1365
1366
1367
|
# File 'lib/rexle.rb', line 1363
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete }
end
|
#element(xpath) ⇒ Object
1371
|
# File 'lib/rexle.rb', line 1371
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1372
|
# File 'lib/rexle.rb', line 1372
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1373
|
# File 'lib/rexle.rb', line 1373
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
|
# File 'lib/rexle.rb', line 1322
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
1382
1383
1384
|
# File 'lib/rexle.rb', line 1382
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1381
|
# File 'lib/rexle.rb', line 1381
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1374
|
# File 'lib/rexle.rb', line 1374
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1376
1377
1378
1379
|
# File 'lib/rexle.rb', line 1376
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1386
1387
1388
|
# File 'lib/rexle.rb', line 1386
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
|
# File 'lib/rexle.rb', line 1390
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
363
364
365
|
# File 'lib/rexle.rb', line 363
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|