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.
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
|
# File 'lib/rexle.rb', line 250
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.
247
248
249
|
# File 'lib/rexle.rb', line 247
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
248
249
250
|
# File 'lib/rexle.rb', line 248
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
247
248
249
|
# File 'lib/rexle.rb', line 247
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1300
|
# File 'lib/rexle.rb', line 1300
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
|
# File 'lib/rexle.rb', line 1304
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
1316
|
# File 'lib/rexle.rb', line 1316
def add_text(s) end
|
#at_css(selector) ⇒ Object
288
289
290
|
# File 'lib/rexle.rb', line 288
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1301
|
# File 'lib/rexle.rb', line 1301
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1302
|
# File 'lib/rexle.rb', line 1302
def attributes() @doc.attributes end
|
#clone ⇒ Object
284
285
286
|
# File 'lib/rexle.rb', line 284
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1366
1367
1368
|
# File 'lib/rexle.rb', line 1366
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
292
293
294
|
# File 'lib/rexle.rb', line 292
def css(selector)
selector.split(',').flat_map{|x| @doc.root.xpath RexleCSS.new(x).to_xpath}
end
|
#delete(xpath) ⇒ Object
Also known as:
remove
1320
1321
1322
1323
1324
|
# File 'lib/rexle.rb', line 1320
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete }
end
|
#element(xpath) ⇒ Object
1328
|
# File 'lib/rexle.rb', line 1328
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1329
|
# File 'lib/rexle.rb', line 1329
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1330
|
# File 'lib/rexle.rb', line 1330
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
|
# File 'lib/rexle.rb', line 1279
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
1339
1340
1341
|
# File 'lib/rexle.rb', line 1339
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1338
|
# File 'lib/rexle.rb', line 1338
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1331
|
# File 'lib/rexle.rb', line 1331
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1333
1334
1335
1336
|
# File 'lib/rexle.rb', line 1333
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1343
1344
1345
|
# File 'lib/rexle.rb', line 1343
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
|
# File 'lib/rexle.rb', line 1347
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
296
297
298
|
# File 'lib/rexle.rb', line 296
def xpath(path, &blk)
@doc.xpath(path, &blk)
end
|