Method: OpenNebula::XMLElement#add_element

Defined in:
lib/opennebula/xml_element.rb

#add_element(xpath, elems) ⇒ Object

Add a new element to the xml xpath::String xpath xpression where the elemente will be added elems::Hash Hash containing the pairs key-value to be included Examples:

add_element('VM', 'NEW_ITEM' => 'NEW_VALUE')
  <VM><NEW_ITEM>NEW_VALUE</NEW_ITEM>...</VM>

add_element('VM/TEMPLATE', 'V1' => {'X1' => 'A1', 'Y2' => 'A2'})
  <VM><TEMPLATE><V1><X1>A1</X1><Y2>A2</Y2>...</TEMPLATE></VM>


118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/opennebula/xml_element.rb', line 118

def add_element(xpath, elems)
    elems.each { |key, value|
        if value.instance_of?(Hash)
            if NOKOGIRI
                elem = Nokogiri::XML::Node.new key, @xml.document
                value.each { |k2, v2|
                    child = Nokogiri::XML::Node.new k2, elem
                    child.content = v2
                    elem.add_child(child)
                }
                @xml.xpath(xpath.to_s).first.add_child(elem)
            else
                elem = REXML::Element.new(key)
                value.each { |k2, v2|
                    elem.add_element(k2).text = v2
                }
                @xml.elements[xpath].add_element(elem)
            end
        else
            if NOKOGIRI
                elem = Nokogiri::XML::Node.new key, @xml.document
                elem.content = value
                @xml.xpath(xpath.to_s).first.add_child(elem)
            else
                @xml.elements[xpath].add_element(key).text = value
            end
        end
    }
end