2013-11-11 3 views
0

Я хочу прочитать строки XML из интернет-url (url будет введен) и извлечь значение даты (dd, mm, yyyy) в строку или int. Как я могу сделать это с помощью visual C++, mfc эффективным способом?Прочитать строки xml с url

Линии, доступные на веб-странице, приведены ниже.

спасибо.

<location> 
<latitude>0</latitude> 
<longitude>0</longitude> 
</location> 
<offset>0</offset> 
<suffix>Z</suffix> 
<localtime>11 Nov 2013 15:23:58</localtime> 
<isotime>2013-11-11 15:23:58 +0000</isotime> 
<utctime>2013-11-11 15:23:58</utctime> 
<dst>False</dst> 
+0

Первый вопрос: «Как открыть файл, сохраненный на URL» Низкий уровень, используя TCP-соединения, High-level, используя библиотеки классов, такие как cURL. – deepmax

+0

@ MM, спасибо, так как я не знаком с процессом, честно говоря, я не знаю, с чего начать – user2937812

+0

Построить объект XML-документа, загрузить URL-адрес в объект (метод Load (url)) и использовать SelectSingleNode или SelectNodes для запроса данных –

ответ

1

Спасибо, ребята, за ваши комментарии. Я искал и использовал библиотеку cURL для преодоления моей проблемы. Вероятно, самый простой способ с некоторыми примерами. Кроме того, благодаря предыдущей теме, помогло: How do I download xml from the internet in C++

size_t AppendDataToStringCurlCallback(void *ptr, size_t size, size_t nmemb, void  *vstring) 
{ 
std::string * pstring = (std::string*)vstring; 
pstring->append((char*)ptr, size * nmemb); 
return size * nmemb; 
} 

std::string DownloadUrlAsString(const std::string & url) 
{ 
std::string body; 

CURL *curl_handle; 
curl_global_init(CURL_GLOBAL_ALL); 
curl_handle = curl_easy_init(); 
curl_easy_setopt(curl_handle, CURLOPT_URL, url.c_str()); 
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, AppendDataToStringCurlCallback); 
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &body); 
curl_easy_perform(curl_handle); 
curl_easy_cleanup(curl_handle); 

return body; 
} 

int main(void) 
    { 
CURL *curl; 
CURLcode res; 
std::string data_to_read; 

curl = curl_easy_init(); 
if(curl) { 
    //curl_easy_setopt(curl, CURLOPT_URL, "www.earthtools.org/timezone/0/0"); 

    data_to_read=DownloadUrlAsString("www.earthtools.org/timezone/0/0"); 
    res = curl_easy_perform(curl); 

    // always cleanup 
    curl_easy_cleanup(curl); 
} 

std::string str=data_to_read; 
std::string str2 ("<utctime>"); 


std::size_t found = str.find(str2); 
if (found!=std::string::npos) 
std::cout << "first data found at: " << found << '\n'; 
//data_to_read[found+9] 


char year[4];//="yyyy"; 
char month[2];//="mm"; 
char day[2];//="dd"; 

int delta=0; 
int start=found+9; 
for (int k=start; k<start+10;k++) 
{ 
    if(k<start+4){ 
     year[delta]= data_to_read[k]; 
     delta++; 
    } 
    else if (k==start+4) 
     delta=0; 
    else if ((k>=start+5) && (k<=start+6)) 
    { 
     month[delta]=data_to_read[k]; 
     delta++; 
    } 
    else if (k==start+7) 
     delta=0; 
    else if ((k>=start+8) && (k<=start+9)) 
    { 
     day[delta]=data_to_read[k]; 
     delta++; 
    } 


} 


int year_m=atoi(year); 
int month_m=atoi(month); 
int day_m=atoi(day); 
0
  • Использование IXMLHTTPRequest object для загрузки содержимого.
  • После загрузки объект responseXML property возвращает IXMLDOMDocument pointer, представляющий проанализированный XML-документ.
  • Используйте его методы selectNodes или selectSingleNode, чтобы найти нужный узел, представленный IXMLDOMNode интерфейсом.
  • Прочитать его nodeValue объект недвижимости для получения текста, который он содержит.

InternetTimeToSystemTime может использоваться для анализа строки типа «11 ноября 2013 года 15:23:58». Я не могу думать, с моей точки зрения, о готовой функции для синтаксического анализа даты ISO, например, «2013-11-11 15:23:58», но, похоже, поддается простой старой sscanf.

Смежные вопросы