def self.from_xml(xml,flickr=nil)
els = xml.elements
att = xml.root.attributes
nsid = cond_attr(att,'nsid')
username = cond_text(els,'/person/username')
p = flickr.person_cache_lookup(nsid) if flickr
p ||= Flickr::Person.new(flickr,nsid,username)
p.username = username
p.isadmin = cond_attr(att,'isadmin') &&
cond_attr(att,'isadmin') == '1'
p.ispro = cond_attr(att,'ispro') &&
cond_attr(att,'ispro') == '1'
p.iconserver = cond_attr(att,'iconserver') &&
cond_attr(att,'iconserver').to_i
p.realname = cond_text(els,'/person/realname')
p.mbox_sha1sum = cond_text(els,'/person/mbox_sha1sum')
p.location = cond_text(els,'/person/location')
p.photosurl = cond_text(els,'/person/photosurl')
p.profileurl = cond_text(els,'/person/profileurl')
tstr = cond_text(els,'/person/photos/firstdate')
p.photos_firstdate = Time.at(tstr.to_i) if tstr
tstr = cond_text(els, '/person/photos/firstdatetaken')
p.photos_firstdatetaken = Time.gm(*ParseDate.parsedate(tstr)) if
tstr
p.photos_count = cond_text(els,'/person/photos/count')
p.photos_count = p.photos_count if p.photos_count
p.info_fetched = true if p.photos_count
if els['/user/bandwidth']
att = els['/user/bandwidth'].attributes
p.bandwidth_max = cond_attr(att,'max') &&
cond_attr(att,'max').to_i
p.bandwidth_used = cond_attr(att,'used') &&
cond_attr(att,'used').to_i
end
if els['/user/filesize']
att = els['/user/filesize'].attributes
p.filesize_max = cond_attr(att,'max') &&
cond_attr(att,'max').to_i
end
p.upload_fetched = true if p.bandwidth_max
flickr.person_cache_store(p) if flickr
return p
end