Vineeth -
You should be able to use something like:
#include "stdafx.h"
#include <objbase.h>
#include <tchar.h>
#include <msxml6.h>
#include <sstream>
#include <string>
using namespace std;
#define CHK_HR(stmt) do{ hr=(stmt); if (FAILED(hr)) goto CleanUp; } while(0)
#define CHK_ALLOC(p) do { if (!(p)) { hr = E_OUTOFMEMORY; goto CleanUp; } } while(0)
#define SAFE_RELEASE(p) do { if ((p)) { (p)->Release(); (p) = NULL; } } while(0)
HRESULT CreateAndInitDOM(IXMLDOMDocument **ppDoc)
{
HRESULT hr = CoCreateInstance(__uuidof(DOMDocument60), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppDoc));
if (SUCCEEDED(hr))
{
(*ppDoc)->put_async(VARIANT_FALSE);
(*ppDoc)->put_validateOnParse(VARIANT_FALSE);
(*ppDoc)->put_resolveExternals(VARIANT_FALSE);
}
return hr;
}
HRESULT VariantFromString(PCWSTR wszValue, VARIANT &Variant)
{
HRESULT hr = S_OK;
BSTR bstrString = SysAllocString(wszValue);
CHK_ALLOC(bstrString);
V_VT(&Variant) = VT_BSTR;
V_BSTR(&Variant) = bstrString;
CleanUp:
return hr;
}
BSTR ConvertMBSToBSTR(const std::string& str)
{
int wslen = ::MultiByteToWideChar(CP_ACP, 0 ,
str.data(), str.length(),
NULL, 0);
BSTR wsdata = ::SysAllocStringLen(NULL, wslen);
::MultiByteToWideChar(CP_ACP, 0 ,
str.data(), str.length(),
wsdata, wslen);
return wsdata;
}
void saveDOM()
{
HRESULT hr = S_OK;
IXMLDOMDocument *pXMLDom=NULL;
IXMLDOMParseError *pXMLErr = NULL;
BSTR bstrXML = NULL;
BSTR bstrErr = NULL;
VARIANT_BOOL varStatus;
VARIANT varFileName;
string xml = "<r>\n";
VariantInit(&varFileName);
CHK_HR(CreateAndInitDOM(&pXMLDom));
BYTE shorts[10];
for(int i = 0; i < 10; i++) {
shorts[i] = (BYTE)i;
}
for(int i = 0; i < 10; i++) {
ostringstream convert;
xml += "<a>\n";
convert << (int)shorts[i];
xml += convert.str();
xml += "</a>\n";
}
xml += "</r>";
bstrXML = ConvertMBSToBSTR(xml);
CHK_ALLOC(bstrXML);
CHK_HR(pXMLDom->loadXML(bstrXML, &varStatus));
if (varStatus == VARIANT_TRUE)
{
CHK_HR(pXMLDom->get_xml(&bstrXML));
printf("XML DOM loaded from app:\n%S\n", bstrXML);
VariantFromString(L"myData.xml", varFileName);
CHK_HR(pXMLDom->save(varFileName));
printf("XML DOM saved to myData.xml\n");
}
else
{
CHK_HR(pXMLDom->get_parseError(&pXMLErr));
CHK_HR(pXMLErr->get_reason(&bstrErr));
printf("Failed to load DOM from xml string. %S\n", bstrErr);
}
CleanUp:
SAFE_RELEASE(pXMLDom);
SAFE_RELEASE(pXMLErr);
SysFreeString(bstrXML);
SysFreeString(bstrErr);
VariantClear(&varFileName);
}
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitialize(NULL);
if(SUCCEEDED(hr))
{
saveDOM();
CoUninitialize();
}
return 0;
}
</string></sstream></msxml6.h></tchar.h></objbase.h>