请教一个关于 C++ Poco XML SAX 解析 相关的问题

2018-11-30 11:54:51 +08:00
 wangsen1611
#include "HTTPRequestHome.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTMLForm.h"
#include "Poco/StreamCopier.h"
#include "Poco/SAX/SAXParser.h"
#include "XMLHandler.h"

using namespace Poco;
using namespace std;
using namespace Poco::XML;


void HTTPRequestHome::handleRequest(HTTPServerRequest &request, HTTPServerResponse &response) {
    response.setStatus(HTTPResponse::HTTP_OK);
    ostream &stream = response.send();

    if (request.getMethod() == HTTPServerRequest::HTTP_GET) {
        HTMLForm form(request);
        stream << form.get("echostr");
        return;
    }

    string data;
    StreamCopier::copyToString(request.stream(), data);

    XMLHandler handler;
    SAXParser parser;
    parser.setContentHandler(&handler);
    parser.parseString(data);
    
//    已经解析完了 可是要怎么拿到这里来用呢?

    stream << "success";
}

XMLHandler.h
#ifndef QUNAR_XMLHANDLER_H
#define QUNAR_XMLHANDLER_H

#include "Poco/SAX/ContentHandler.h"

using namespace Poco::XML;
using namespace std;


class XMLHandler : public ContentHandler {

public:
    void setDocumentLocator(const Locator *loc) override {};

    void startDocument() override {};

    void endDocument() override {}

    void startElement(const XMLString &uri, const XMLString &localName, const XMLString &qname,
                      const Attributes &attrList) override;

    void endElement(const XMLString &uri, const XMLString &localName, const XMLString &qname) override {};

    void characters(const XMLChar ch[], int start, int length) override;

    void ignorableWhitespace(const XMLChar ch[], int start, int length) override {};

    void processingInstruction(const XMLString &target, const XMLString &data) override {};

    void startPrefixMapping(const XMLString &prefix, const XMLString &uri) override {};

    void endPrefixMapping(const XMLString &prefix) override {};

    void skippedEntity(const XMLString &name) override {};

};


#endif //QUNAR_XMLHANDLER_H

XMLHandler.cpp

#include <iostream>
#include "XMLHandler.h"


void XMLHandler::startElement(const XMLString &uri, const XMLString &localName, const XMLString &qname,
                              const Attributes &attrList) {
    cout << localName << endl;
}

void XMLHandler::characters(const XMLChar *ch, int start, int length) {
    cout << static_cast<string>(ch).substr(static_cast<unsigned long>(start), static_cast<unsigned long>(length));
}

解析好了 可以控制台输出 但是不知道 怎么拿出来用

906 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513025

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX