+ raise OSM::APIBadXMLError.new("changeset", xml, "XML doesn't contain an osm/changeset element.")
+ rescue LibXML::XML::Error, ArgumentError => ex
+ raise OSM::APIBadXMLError.new("changeset", xml, ex.message)
+ end
+ end
+
+ def self.from_xml_node(pt, create=false)
+ cs = Changeset.new
+ if create
+ cs.created_at = Time.now.getutc
+ # initial close time is 1h ahead, but will be increased on each
+ # modification.
+ cs.closed_at = cs.created_at + IDLE_TIMEOUT
+ # initially we have no changes in a changeset
+ cs.num_changes = 0
+ end
+
+ pt.find('tag').each do |tag|
+ raise OSM::APIBadXMLError.new("changeset", pt, "tag is missing key") if tag['k'].nil?
+ raise OSM::APIBadXMLError.new("changeset", pt, "tag is missing value") if tag['v'].nil?
+ cs.add_tag_keyval(tag['k'], tag['v'])