VC++使用 MSXML库

该代码段展示了如何使用MSXML2库在C++中进行XML的基本操作,包括创建XML文档声明、根节点、子节点以及添加属性。示例创建了一个<result>节点,包含<code>、<message>等子节点,并插入两行<rowdata>数据。
摘要由CSDN通过智能技术生成

写XML基本操作

void CT1Dlg::OnBnClickedOk()
{
    CoInitialize(0); 
    CComBSTR indata = NULL;  
    BSTR    outdata;  

    _bstr_t XmlFile = L"D:\\result.xml"; // xml文件
    MSXML2::IXMLDOMDocumentPtr pDoc = NULL; // xml文档
    MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
    MSXML2::IXMLDOMCommentPtr pComment = NULL; // 注释
    MSXML2::IXMLDOMElementPtr pRootElement = NULL, pData,pElement = NULL; // 根节点(元素)
    MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL, pNode2 = NULL; // 节点
    MSXML2::IXMLDOMAttributePtr pAttrNode = NULL; // 属性
    HRESULT hr = pDoc.CreateInstance("Msxml2.DOMDocument.4.0"); //
    if (FAILED(hr))
    {
        printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!");
        return  ;
    }

    // (1)创建xml文档声明(或insertBefore根节点)
    pProInstruction = pDoc->createProcessingInstruction(L"xml", L"version=\"1.0\" encoding=\"utf-8\"");
    pDoc->appendChild((MSXML2::IXMLDOMNode*)pProInstruction);
    // (2)创建根节点<result>
    pRootElement =  pDoc->createElement(L"result");   
    pDoc->PutRefdocumentElement(pRootElement);  

    pElement = pDoc->createElement(L"code");
    pElement->put_text(L"0");
    pRootElement->appendChild((MSXML2::IXMLDOMNode*)pElement);  

    pElement = pDoc->createElement(L"message");
    pElement->put_text(L"操作成功!");
    pRootElement->appendChild((MSXML2::IXMLDOMNode*)pElement); 

    pElement = pDoc->createElement(L"rowcount");
    pElement->put_text(L"1");
    pRootElement->appendChild((MSXML2::IXMLDOMNode*)pElement); 


    //第 1 行数据
    pData = pDoc->createElement(L"rowdata");       
    pRootElement->appendChild((MSXML2::IXMLDOMNode*)pData); 

    pElement = pDoc->createNode((_variant_t)(long)MSXML2::NODE_ELEMENT, L"appcode", L"");
    pNode = pDoc->createCDATASection(L"1001  01" ); 
    pElement->appendChild(pNode);
    pData->appendChild(pElement); // 字段

    //第 2 行数据
    pData = pDoc->createElement(L"rowdata");
    pRootElement->appendChild((MSXML2::IXMLDOMNode*)pData); 

    pElement = pDoc->createNode((_variant_t)(long)MSXML2::NODE_ELEMENT, L"appcode", L"");
    pNode = pDoc->createCDATASection((_bstr_t)"1002  01" ); 
    pElement->appendChild(pNode);
    pData->appendChild(pElement); // 字段

    pDoc->save(XmlFile);
    pDoc.Release() ; 

    CoUninitialize();
}

生成的文件样本

<?xml version="1.0" encoding="utf-8"?>
<result>
  <code>0</code>
  <message>操作成功!</message>
  <rowcount>1</rowcount>
  <rowdata>
    <appcode><![CDATA[1001]]></appcode>
    <appname><![CDATA[test.exe]]></appname>
    <apptitle><![CDATA[测试系统]]></apptitle>
    <version><![CDATA[10]]></version>
    <ftpfolder><![CDATA[/update/test/]]></ftpfolder>
    <subfolder><![CDATA[2016.05.01.17.58.48]]></subfolder>
    <url><![CDATA[]]></url>
    <lastupdate><![CDATA[]]></lastupdate>
    <appargs><![CDATA[]]></appargs>
    <remark><![CDATA[

]]></remark>
    <srcfolder><![CDATA[/source/test/]]></srcfolder>
    <srcsubfolder><![CDATA[2016.05.01.17.58.48]]></srcsubfolder>
    <dirlist><![CDATA[\pic;]]></dirlist>
    <filelist><![CDATA[config.ini;update32.ini;]]></filelist>
    <UPTYPE><![CDATA[.pbd;]]></UPTYPE>
    <SRCTYPE><![CDATA[.pbd;.pbl;.pbw;]]></SRCTYPE>
    <UCODE><![CDATA[0]]></UCODE>
  </rowdata>
</result>


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白的编程日志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值