Xerces-c DOM XML文件的构造

Xerces中构造xml很简单,但是想输出就很麻烦,Xerces支持三种输出 输出到内存
输出到标准输出 输出到本地文件
下面列出用到的一些重要的类,可以查询官网API解锁更多的用法

1.DOMImplementation和DOMImplementationLS这两货是DOM界的造物者,如果你发现你有构造不了的类,查询这两货的API就可以啦,比如
DOMDoument DOMLSSerializer
2.DOMLSOutput获得输出的句柄,通过与输出目标绑定 正如上面提及的 MemBufFormatTarget StdOutFormatTarget LocalFileFormatTarget,此外还可以设置输出的编码方式等行为
3.DOMLSSerializer 串行化DOMDocument句柄和输出句柄,使得二者相关联

下面来看看例子吧,解锁它的用法

#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <iostream>
#include <xercesc/framework/LocalFileFormatTarget.hpp>

#define Transcode_1(x)  XMLString::transcode(x)
#define Transcode_3(x,y,z) XMLString::transcode(x,y,z)

using namespace xercesc;

int main()
{
    try 
    {
        XMLPlatformUtils::Initialize();
    }
    catch (const XMLException& toCatch)
    {
        std::cerr << Transcode_1(toCatch.getMessage());
    }
    try 
    {
        DOMImplementation* imp = DOMImplementationRegistry::getDOMImplementation(Transcode_1("Core"));
        DOMDocument* doc = imp->createDocument(0,Transcode_1("root"),0);

        DOMElement* node = doc->createElement(Transcode_1("node1"));
        node->setAttribute(Transcode_1("name"),Transcode_1("node1"));
        node->setTextContent(Transcode_1("node1"));

        DOMElement* root = doc->getDocumentElement();
        root->appendChild(node);

        DOMElement* node2 = doc->createElement(Transcode_1("node2"));
        node2->setAttribute(Transcode_1("name"),Transcode_1("node2"));
        node2->setTextContent(Transcode_1("node2"));

        root->appendChild(node2);

        DOMElement* node2_1 = doc->createElement(Transcode_1("node2_1"));
        node2_1->setAttribute(Transcode_1("name"),Transcode_1("node2_1"));
        node2_1->setTextContent(Transcode_1("node2_1"));
        node2->appendChild(node2_1);

        DOMLSOutput* output = dynamic_cast<DOMImplementationLS*>(imp)->createLSOutput();
        DOMLSSerializer* serial = dynamic_cast<DOMImplementationLS*>(imp)->createLSSerializer();
        XMLFormatTarget* target = new LocalFileFormatTarget("2.xml");
        output->setByteStream(target);
        serial->write(doc,output);
        doc->release();
        serial->release();
        delete target;
    }
    catch (const DOMException& toCatch)
    {
        std::cerr << Transcode_1(toCatch.getMessage());
    }
    return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值