c++读写xml方法

//Include
#import "MSXML6.dll" rename_namespace(_T("MSXML"))
#include <msxml2.h>

//Read
MSXML::IXMLDOMDocumentPtr pXMLDoc;    
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument30));
if (FAILED(hr))
{
    ...
}

pXMLDoc->async = VARIANT_FALSE;

if (pXMLDoc->load(m_strFile.GetBuffer()) == VARIANT_FALSE)
{
    pXMLDoc.Release();
}

CString strText;
MSXML::IXMLDOMNodePtr pParentNode = NULL;
MSXML::IXMLDOMNodePtr pChildNode = NULL;
MSXML::IXMLDOMNamedNodeMapPtr pNamedNodeMap= NULL;
MSXML::IXMLDOMNodePtr pAttribNode= NULL; 

pParentNode = pXMLDoc->selectSingleNode(_T("Parent"));
if (pParentNode != NULL)
{
     pChildNode = pParentNode->selectSingleNode(_T("Child0"));
     if (pChildNode != NULL)
     {
         pNamedNodeMap = pChildNode->attributes;
         if (pNamedNodeMap != NULL)
         {
            pAttribNode = pNamedNodeMap->getNamedItem(_T("attribute0"));
            if (pAttribNode != NULL)
            {
               strText = (LPCTSTR)pAttribNode->text;
               ...;
             }

            pAttribNode = pNamedNodeMap->getNamedItem(_T("attribute1"));
            if (pAttribNode != NULL)
             {
                  ...
             }
          }
      }

      pChildNode = pParentNode->selectSingleNode(_T("Child1"));
      if (pChildNode != NULL)
      {
          ...
      }
}

pXMLDoc.Release();


// Write
MSXML::IXMLDOMDocumentPtr pXMLDoc;    
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument30));

if (FAILED(hr))
{
    return FALSE;
}

pXMLDoc->async = VARIANT_FALSE;

if(pXMLDoc->loadXML(_T("<xxx></xxx>")) == VARIANT_FALSE)
{
    pXMLDoc.Release();
    return FALSE;
}

MSXML::IXMLDOMElementPtr pXMLRootElem = pXMLDoc->GetdocumentElement();

MSXML::IXMLDOMProcessingInstructionPtr pXMLProcessingNode = pXMLDoc->createProcessingInstruction("xml", " version='1.0' encoding='UTF-16'");

_variant_t vtObject;
vtObject.vt = VT_DISPATCH;
vtObject.pdispVal = pXMLRootElem;
vtObject.pdispVal->AddRef();

pXMLDoc->insertBefore(pXMLProcessingNode,vtObject);

CString strText;
MSXML::IXMLDOMElementPtr pXMLChild = NULL;
 
MSXML::IXMLDOMElementPtr pXMLParent = pXMLDoc->createElement(_T("Parent"));
pXMLParent  = pXMLRootElem->appendChild(pXMLParent);
        
pXMLChild = pXMLDoc->createElement(_T("Child0"));
strText = xxx;
pXMLChild->setAttribute(_T("attribute0"),(LPCTSTR)strText);
strText = yyy;
pXMLChild->setAttribute(_T("attribute1"),(LPCTSTR)strText);
pXMLChild = pXMLParent->appendChild(pXMLChild);


pXMLChild = pXMLDoc->createElement(_T("Child1"));
strText = xxx;
pXMLChild->setAttribute(_T("attribute0"),(LPCTSTR)strText);
strText = yyy;
pXMLChild->setAttribute(_T("attribute1"),(LPCTSTR)strText);
pXMLChild = pXMLParent->appendChild(pXMLChild);

  ...
hr = pXMLDoc->save(m_strFile.GetBuffer());
if (FAILED(hr))
{
    ...
}
        
pXMLDoc.Release();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值