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
Returns a new instance of Rexle.
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
|
# File 'lib/rexle.rb', line 241
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.
238
239
240
|
# File 'lib/rexle.rb', line 238
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
239
240
241
|
# File 'lib/rexle.rb', line 239
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
238
239
240
|
# File 'lib/rexle.rb', line 238
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1389
|
# File 'lib/rexle.rb', line 1389
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
|
# File 'lib/rexle.rb', line 1393
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
1405
|
# File 'lib/rexle.rb', line 1405
def add_text(s) end
|
#at_css(selector) ⇒ Object
279
280
281
|
# File 'lib/rexle.rb', line 279
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1390
|
# File 'lib/rexle.rb', line 1390
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1391
|
# File 'lib/rexle.rb', line 1391
def attributes() @doc.attributes end
|
#clone ⇒ Object
275
276
277
|
# File 'lib/rexle.rb', line 275
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1455
1456
1457
|
# File 'lib/rexle.rb', line 1455
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
283
284
285
286
287
288
289
290
291
292
|
# File 'lib/rexle.rb', line 283
def css(selector)
a = selector.split(',').flat_map do |x|
@doc.root.xpath RexleCSS.new(x).to_xpath
end
a.shift if self.class.to_s =~ /Rexle$/
return a
end
|
#delete(xpath) ⇒ Object
Also known as:
remove
1409
1410
1411
1412
1413
|
# File 'lib/rexle.rb', line 1409
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete }
end
|
#element(xpath) ⇒ Object
1417
|
# File 'lib/rexle.rb', line 1417
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1418
|
# File 'lib/rexle.rb', line 1418
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1419
|
# File 'lib/rexle.rb', line 1419
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
|
# File 'lib/rexle.rb', line 1368
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
1428
1429
1430
|
# File 'lib/rexle.rb', line 1428
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1427
|
# File 'lib/rexle.rb', line 1427
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1420
|
# File 'lib/rexle.rb', line 1420
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1422
1423
1424
1425
|
# File 'lib/rexle.rb', line 1422
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1432
1433
1434
|
# File 'lib/rexle.rb', line 1432
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
|
# File 'lib/rexle.rb', line 1436
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
294
295
296
|
# File 'lib/rexle.rb', line 294
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|