首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从url读取xml行

从url读取xml行
EN

Stack Overflow用户
提问于 2013-11-11 15:56:16
回答 2查看 3K关注 0票数 0

我希望从internet url中读取xml行(url将被输入),并将日期值( dd,mm,yyyy)提取到字符串或int中。如何有效地使用可视化的c++、mfc来实现这一点?

网页上可用的行如下所示。

谢谢。

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 16:00:46

谢谢你们的评论。我通过一些例子搜索并使用cURL库来克服我的issue.Possibly --这是最简单的方法。另外,由于前面的主题,它帮助了很多:How do I download xml from the internet in C++

代码语言:javascript
复制
  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
EN

Stack Overflow用户

发布于 2013-11-11 19:52:29

  • 使用 object下载内容。
  • 下载后,对象的 property返回表示解析的 pointer文档的 pointer
  • 使用其selectNodesselectSingleNode方法来定位所需的节点,如IXMLDOMNode接口所示。
  • 读取其nodeValue属性以获取它包含的文本。

InternetTimeToSystemTime可以用来解析字符串,比如“2013年11月11日15:23:58”。我想不出一个现成的函数来解析一个ISO日期,比如"2013-11-11 15:23:58",但它似乎适合于一个普通的老sscanf

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19910562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档