c++ http服务器客户端程序-传输xml解析xml数据(3)

261 篇文章 10 订阅
3 篇文章 0 订阅

1、服务器端的实例:

#include "stdafx.h"

#include <iostream>

#include <chrono>
#include <cstdio>
#include "httplib.h"

using namespace httplib;

using namespace std;

#include "pugixml/pugixml.cpp"

struct xml_string_writer : pugi::xml_writer
{
    std::string result;
    virtual void write(const void* data, size_t size)
    {
        result += std::string(static_cast<const char*>(data), size);
    }
};

string WriteXML()
{
    using namespace pugi;
    pugi::xml_document doc;
    pugi::xml_node root_node = doc.append_child("Root");
    pugi::xml_node students_node = root_node.append_child("students");
    pugi::xml_node student_node = students_node.append_child("student");
    pugi::xml_node name_node = student_node.append_child("name");
    name_node.append_child(pugi::node_pcdata).set_value("2222");
    
    xml_string_writer _str;
    doc.save(_str);
    return _str.result;
}


int main()
{
    string strXML = WriteXML();

    Server svr;
    if (!svr.is_valid())
    {
        printf("server has an error...\n");
        return -1;
    }

    svr.Get("/", [=](const Request& /*req*/, Response& res)
    {
        res.set_redirect("/hi");
    });

    svr.Get("/hi", [&](const Request& /*req*/, Response& res)
    {
        res.set_content(strXML, "text/plain");
    });

    svr.Get("/stop",
        [&](const Request& /*req*/, Response& /*res*/) { svr.stop(); });

    svr.listen("localhost", 1234);

}

 2、客户端实例:
void ReadXML(string strXML)
{
    std::locale::global(std::locale("chs"));

    using namespace pugi;
    pugi::xml_document doc;
    doc.load_string(strXML.c_str());
    pugi::xml_node tools = doc.first_child();
    /*pugi::xml_node tools = doc.child("Root");*/
    for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it)
    {
        const char *strnode = it->name();
        int tt = 66;
    }
}


int main()
{
    httplib::Client cli("localhost", 1234);
    if (auto res = cli.Get("/hi"))
    {
        cout << res->status << endl;
        cout << res->get_header_value("Content-Type") << endl;
        cout << res->body << endl;

        //解析当前的json
        ReadXML(res->body);
    }
    else
    {
        
    }
    system("pause");
}
 

 

至此,一个简单的http服务器端客户端通信传输xml数据实例就完成了
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在网页开发中,HTTP(Hypertext Transfer Protocol)和XML(eXtensible Markup Language)经常结合使用。 首先,HTTP是一种用于在网络上传输数据的协议,它负责浏览器和服务器之间的通信。而XML是一种用于描述数据的标记语言,它可以将数据以可读性很高的格式进行编码。 在使用HTTPXML结合时,通常的情况是,客户端浏览器通过发送HTTP请求到服务器来获取数据服务器会将数据XML格式进行编码,并通过HTTP响应返回给客户端。客户端浏览器再通过解析XML数据来提取所需的信息,并将其展示给用户。 一个常见的例子是使用Ajax技术来实现异步通信。通过Ajax,客户端浏览器可以在不重新加载整个页面的情况下与服务器进行通信。在这种情况下,客户端浏览器会通过发送HTTP请求来获取数据服务器会将数据XML格式编码,然后通过HTTP响应返回给客户端。客户端浏览器再通过JavaScript代码解析XML数据,并将数据动态展示在页面上。 另外,HTTPXML也可以结合在Web服务中使用。Web服务是一种通过网络进行通信和交互的软件系统。在使用Web服务时,客户端浏览器通过发送HTTP请求来调用服务器上的特定功能。服务器会将响应以XML格式返回给客户端,客户端再通过解析XML数据来获取服务器提供的信息和功能。 总之,HTTPXML可以结合使用,通过HTTP传输XML数据,实现数据的传递和交互。这种结合为网页开发提供了更加灵活和可扩展的方式,使得数据传输和展示更加方便和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值