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.
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
257
258
259
260
261
262
|
# File 'lib/rexle.rb', line 230
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.
227
228
229
|
# File 'lib/rexle.rb', line 227
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
228
229
230
|
# File 'lib/rexle.rb', line 228
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
227
228
229
|
# File 'lib/rexle.rb', line 227
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1378
|
# File 'lib/rexle.rb', line 1378
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
|
# File 'lib/rexle.rb', line 1382
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
1394
|
# File 'lib/rexle.rb', line 1394
def add_text(s) end
|
#at_css(selector) ⇒ Object
268
269
270
|
# File 'lib/rexle.rb', line 268
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1379
|
# File 'lib/rexle.rb', line 1379
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1380
|
# File 'lib/rexle.rb', line 1380
def attributes() @doc.attributes end
|
#clone ⇒ Object
264
265
266
|
# File 'lib/rexle.rb', line 264
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1444
1445
1446
|
# File 'lib/rexle.rb', line 1444
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
272
273
274
275
276
277
278
279
280
281
|
# File 'lib/rexle.rb', line 272
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
1398
1399
1400
1401
1402
|
# File 'lib/rexle.rb', line 1398
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete }
end
|
#element(xpath) ⇒ Object
1406
|
# File 'lib/rexle.rb', line 1406
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1407
|
# File 'lib/rexle.rb', line 1407
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1408
|
# File 'lib/rexle.rb', line 1408
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
|
# File 'lib/rexle.rb', line 1357
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
1417
1418
1419
|
# File 'lib/rexle.rb', line 1417
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1416
|
# File 'lib/rexle.rb', line 1416
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1409
|
# File 'lib/rexle.rb', line 1409
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1411
1412
1413
1414
|
# File 'lib/rexle.rb', line 1411
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1421
1422
1423
|
# File 'lib/rexle.rb', line 1421
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
|
# File 'lib/rexle.rb', line 1425
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
283
284
285
|
# File 'lib/rexle.rb', line 283
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|