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.
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
236
237
238
239
240
241
|
# File 'lib/rexle.rb', line 205
def initialize(x=nil, rexle: self, debug: false)
@rexle, @debug = rexle, 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.
202
203
204
|
# File 'lib/rexle.rb', line 202
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
203
204
205
|
# File 'lib/rexle.rb', line 203
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
202
203
204
|
# File 'lib/rexle.rb', line 202
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1421
|
# File 'lib/rexle.rb', line 1421
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
|
# File 'lib/rexle.rb', line 1425
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
1437
|
# File 'lib/rexle.rb', line 1437
def add_text(s) end
|
#at_css(selector) ⇒ Object
247
248
249
|
# File 'lib/rexle.rb', line 247
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1422
|
# File 'lib/rexle.rb', line 1422
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1423
|
# File 'lib/rexle.rb', line 1423
def attributes() @doc.attributes end
|
#clone ⇒ Object
243
244
245
|
# File 'lib/rexle.rb', line 243
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1487
1488
1489
|
# File 'lib/rexle.rb', line 1487
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
251
252
253
254
255
256
257
258
259
260
|
# File 'lib/rexle.rb', line 251
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
1441
1442
1443
1444
1445
|
# File 'lib/rexle.rb', line 1441
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete; e = nil }
end
|
#element(xpath) ⇒ Object
1449
|
# File 'lib/rexle.rb', line 1449
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1450
|
# File 'lib/rexle.rb', line 1450
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1451
|
# File 'lib/rexle.rb', line 1451
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
|
# File 'lib/rexle.rb', line 1400
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
1460
1461
1462
|
# File 'lib/rexle.rb', line 1460
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1459
|
# File 'lib/rexle.rb', line 1459
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1452
|
# File 'lib/rexle.rb', line 1452
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1454
1455
1456
1457
|
# File 'lib/rexle.rb', line 1454
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1464
1465
1466
|
# File 'lib/rexle.rb', line 1464
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
|
# File 'lib/rexle.rb', line 1468
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
262
263
264
|
# File 'lib/rexle.rb', line 262
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|