Class: Rexle
Defined Under Namespace
Classes: CData, Comment, Element, Elements
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.
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
274
275
276
277
278
279
280
|
# File 'lib/rexle.rb', line 248
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.
245
246
247
|
# File 'lib/rexle.rb', line 245
def doctype
@doctype
end
|
#instructions ⇒ Object
Returns the value of attribute instructions.
246
247
248
|
# File 'lib/rexle.rb', line 246
def instructions
@instructions
end
|
#prefixes ⇒ Object
Returns the value of attribute prefixes.
245
246
247
|
# File 'lib/rexle.rb', line 245
def prefixes
@prefixes
end
|
Instance Method Details
#add_attribute(x) ⇒ Object
1290
|
# File 'lib/rexle.rb', line 1290
def add_attribute(x) @doc.attribute(x) end
|
#add_element(element) ⇒ Object
Also known as:
add
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
|
# File 'lib/rexle.rb', line 1294
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
1306
|
# File 'lib/rexle.rb', line 1306
def add_text(s) end
|
#at_css(selector) ⇒ Object
286
287
288
|
# File 'lib/rexle.rb', line 286
def at_css(selector)
@doc.root.element RexleCSS.new(selector).to_xpath
end
|
#attribute(key) ⇒ Object
1291
|
# File 'lib/rexle.rb', line 1291
def attribute(key) @doc.attribute(key) end
|
#attributes ⇒ Object
1292
|
# File 'lib/rexle.rb', line 1292
def attributes() @doc.attributes end
|
#clone ⇒ Object
282
283
284
|
# File 'lib/rexle.rb', line 282
def clone()
Rexle.new self.to_a
end
|
#content(options = {}) ⇒ Object
1356
1357
1358
|
# File 'lib/rexle.rb', line 1356
def content(options={})
CGI.unescapeHTML(xml(options))
end
|
#css(selector) ⇒ Object
290
291
292
|
# File 'lib/rexle.rb', line 290
def css(selector)
selector.split(',').flat_map{|x| @doc.root.xpath RexleCSS.new(x).to_xpath}
end
|
#delete(xpath) ⇒ Object
Also known as:
remove
1310
1311
1312
1313
1314
|
# File 'lib/rexle.rb', line 1310
def delete(xpath)
@doc.xpath(xpath).each {|e| e.delete }
end
|
#element(xpath) ⇒ Object
1318
|
# File 'lib/rexle.rb', line 1318
def element(xpath) self.xpath(xpath).first end
|
#elements(s = nil) ⇒ Object
1319
|
# File 'lib/rexle.rb', line 1319
def elements(s=nil) @doc.elements(s) end
|
#name ⇒ Object
1320
|
# File 'lib/rexle.rb', line 1320
def name() @doc.root.name end
|
#parse(x = nil) ⇒ Object
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
|
# File 'lib/rexle.rb', line 1269
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
1329
1330
1331
|
# File 'lib/rexle.rb', line 1329
def root()
@doc.elements.first
end
|
#text(xpath) ⇒ Object
1328
|
# File 'lib/rexle.rb', line 1328
def text(xpath) @doc.text(xpath) end
|
#to_a ⇒ Object
1321
|
# File 'lib/rexle.rb', line 1321
def to_a() @a end
|
#to_s(options = {}) ⇒ Object
1323
1324
1325
1326
|
# File 'lib/rexle.rb', line 1323
def to_s(options={})
return '<UNDEFINED/>' unless @doc
self.xml options
end
|
#write(f) ⇒ Object
1333
1334
1335
|
# File 'lib/rexle.rb', line 1333
def write(f)
f.write xml
end
|
#xml(options = {}) ⇒ Object
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
|
# File 'lib/rexle.rb', line 1337
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
|