+ 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|
+ fail OSM::APIBadXMLError.new("changeset", pt, "tag is missing key") if tag['k'].nil?
+ fail OSM::APIBadXMLError.new("changeset", pt, "tag is missing value") if tag['v'].nil?
+ cs.add_tag_keyval(tag['k'], tag['v'])
+ end
+
+ cs