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.
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
# File 'lib/rexle.rb', line 219
def initialize(x=nil, rexle: self, debug: false)
@rexle, @debug = rexle, debug
$debug = @debug
puts 'inside Rexle'.debug 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.
216
217
218
|
# File 'lib/rexle.rb', line 216
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
217
218
219
|
# File 'lib/rexle.rb', line 217
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
216
217
218
|
# File 'lib/rexle.rb', line 216
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1448
|
# File 'lib/rexle.rb', line 1448
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
|
# File 'lib/rexle.rb', line 1452
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
1464
|
# File 'lib/rexle.rb', line 1464
def add_text(s) end
|
#at_css(selector) ⇒ Object
262
263
264
|
# File 'lib/rexle.rb', line 262
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1449
|
# File 'lib/rexle.rb', line 1449
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1450
|
# File 'lib/rexle.rb', line 1450
def attributes() @doc.attributes end
|
#clone ⇒ Object
258
259
260
|
# File 'lib/rexle.rb', line 258
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1514
1515
1516
|
# File 'lib/rexle.rb', line 1514
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
266
267
268
269
270
271
272
273
|
# File 'lib/rexle.rb', line 266
def css(selector)
a = selector.split(',').flat_map do |x|
@doc.root.xpath RexleCSS.new(x).to_xpath
end
return a
end
|
#delete(xpath) ⇒ Object
Also known as:
remove
1468
1469
1470
1471
1472
|
# File 'lib/rexle.rb', line 1468
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete; e = nil }
end
|
#element(xpath) ⇒ Object
1476
|
# File 'lib/rexle.rb', line 1476
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1477
|
# File 'lib/rexle.rb', line 1477
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1478
|
# File 'lib/rexle.rb', line 1478
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
|
# File 'lib/rexle.rb', line 1427
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
1487
1488
1489
|
# File 'lib/rexle.rb', line 1487
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1486
|
# File 'lib/rexle.rb', line 1486
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1479
|
# File 'lib/rexle.rb', line 1479
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1481
1482
1483
1484
|
# File 'lib/rexle.rb', line 1481
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1491
1492
1493
|
# File 'lib/rexle.rb', line 1491
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
|
# File 'lib/rexle.rb', line 1495
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 and @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
275
276
277
|
# File 'lib/rexle.rb', line 275
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|