본문 바로가기

Programming/MSXML

MSXML - appendChild

#define CHK_HR(stmt)        do { hr=(stmt); if (FAILED(hr)) goto CleanUp; } while(0)


MSXML2::IXMLDOMDocumentPtr    pXMLDom = NULL; 
MSXML2::IXMLDOMNodePtr    newNode  = NULL;
MSXML2::IXMLDOMElementPtr    rootElem   = NULL;

HRESULT hr= pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER);

if (FAILED(hr)) 
{
printf("Failed to instantiate an XML DOM.\n");
return;
}

try
{
pXMLDom->async = VARIANT_FALSE;
pXMLDom->validateOnParse = VARIANT_FALSE;
pXMLDom->resolveExternals = VARIANT_FALSE;

if(pXMLDom->loadXML(L" <Records></Records> ") == VARIANT_TRUE)
{
printf("XML DOM loaded from app:\n%s\n", (LPCSTR)pXMLDom->xml);
rootElem = pXMLDom->GetdocumentElement();

MSXML2::IXMLDOMProcessingInstructionPtr pXMLProcessingNode =   
pXMLDom->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");

_variant_t   vtObject;
vtObject.vt = VT_DISPATCH;
vtObject.ppdispVal = NULL;

vtObject = (IDispatch *)rootElem;

pXMLDom->insertBefore(pXMLProcessingNode,vtObject);

MSXML2::IXMLDOMElementPtr pXMLRecord = pXMLDom->createElement(_T("Record"));
pXMLRecord = rootElem->appendChild(pXMLRecord);

MSXML2::IXMLDOMElementPtr pXMLName = pXMLDom->createElement(_T("Name"));
pXMLName ->Puttext(_T("김바보"));
pXMLName = pXMLRecord->appendChild(pXMLName);
MSXML2::IXMLDOMElementPtr pXMLAge = pXMLDom->createElement(_T("Age"));
pXMLAge ->Puttext(_T("30"));   
pXMLAge = pXMLItem->appendChild(pXMLAge);


pXMLRecord = pXMLDom->createElement(_T("Record"));
pXMLRecord = rootElem->appendChild(pXMLRecord);

pXMLName = pXMLDom->createElement(_T("Name"));
pXMLName ->Puttext(_T("김다희"));
pXMLName = pXMLRecord->appendChild(pXMLName);
pXMLAge = pXMLDom->createElement(_T("Age"));
pXMLAge ->Puttext(_T("27"));   
pXMLAge = pXMLItem->appendChild(pXMLAge);


pXMLRecord = pXMLDom->createElement(_T("Record"));
pXMLRecord = rootElem->appendChild(pXMLRecord);

pXMLName = pXMLDom->createElement(_T("Name"));
pXMLName ->Puttext(_T("이민정"));
pXMLName = pXMLRecord->appendChild(pXMLName);
pXMLAge = pXMLDom->createElement(_T("Age"));
pXMLAge ->Puttext(_T("31"));   
pXMLAge = pXMLItem->appendChild(pXMLAge);

CHK_HR(pXMLDom->save(L"myData.xml"));
printf("XML DOM saved to myData.xml.\n");
}
else
{
printf("Failed to load DOM from xml string. %s\n", (LPCSTR)pXMLDom->parseError->Getreason());
}
}
catch (_com_error errorObject)
{
//LoadXML or Save에 대한 에러 처리
printf("Exception thrown, HRESULT: 0x%08x", errorObject.Error());
}

CleanUp:
return;



 <?xml version="1.0"?>
<Records>
    <Record>
        <Name>김바보</Name>
        <Age>30</Age>
    </Record>
    <Record>
        <Name>김다희</Name>
        <Age>27</Age>
    </Record> 
    <Record>
        <Name>이민정</Name>
        <Age>31</Age>
    </Record> 
</Records>