我想从互联网网址读取xml行(将输入网址)并将日期值(dd,mm,yyyy)提取到字符串或int。我怎么能以有效的方式使用visual c ++,mfc来做到这一点?
网页上提供的行如下所示。
感谢。
<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 :(得分: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);
答案 1 :(得分:0)
IXMLHTTPRequest
object下载内容。responseXML
property将返回表示已解析的XML文档的IXMLDOMDocument
pointer。selectNodes
或selectSingleNode
方法找到所需节点,如IXMLDOMNode
界面所示。nodeValue
属性以获取其中包含的文字。 InternetTimeToSystemTime
可用于解析字符串,如“2013年11月11日15:23:58”。我无法想象一个现成的函数来解析像“2013-11-11 15:23:58”这样的ISO日期,但它似乎适合普通的{{1} }。