module Siresta::XML

Public Class Methods

_emit(ox_doc, elem) click to toggle source
# File lib/siresta/xml.rb, line 59
def self._emit(ox_doc, elem)
  if String === elem
    ox_doc << elem
  else
    ox_elem = Ox::Element.new elem[:tag]
    elem[:attrs].each_pair { |k,v| ox_elem[k] = v }
    ox_doc << ox_elem
    elem[:contents].each { |e| _emit ox_elem, e }
  end
end
_parse(ox_elem) click to toggle source
# File lib/siresta/xml.rb, line 31
def self._parse(ox_elem)
  if String === ox_elem
    ox_elem
  else
    contents = ox_elem.nodes.map { |n| _parse n }
    { tag: ox_elem.name, attrs: ox_elem.attributes, contents: contents }
  end
end
emit(elem, opts = {}) click to toggle source

emit XML

“`ruby puts Siresta::XML.emit(

{ tag: 'foo', attrs: {}, contents: [
  { tag: 'bar', attrs: { id: 99 }, contents: ['hi!'] }
] }

) # <?xml version=“1.0”?> # <foo> # <bar id=“99”>hi!</bar> # </foo> “`

# File lib/siresta/xml.rb, line 53
def self.emit(elem, opts = {})
  ox_doc = Ox::Document.new version: '1.0'
  _emit ox_doc, elem
  Ox.dump ox_doc, { with_xml: true }.merge(opts)
end
parse(xml) click to toggle source

parse XML

“`ruby Siresta::XML.parse '<foo><bar id=“99”>hi!</bar></foo>' # => { tag: 'foo', attrs: {}, contents: [ # { tag: 'bar', attrs: { id: 99 }, contents: ['hi!'] } # ] } “`

# File lib/siresta/xml.rb, line 26
def self.parse(xml)
  ox_elem = Ox.parse xml
  _parse Ox::Document === ox_elem ? ox_elem.root : ox_elem
end