How to set an XML attribute to an integer

Edward discusses how to set an integer in the MSXML APIs in this thread. I wanted to provide the snippet of code necessary to do this on an attribute, using the very awesome wrappers generated by the Visual C++ #import directive.

The catch is that becausae a VARIANT is passed in, you can actually use other variant types that can be converted to a string. Here it goes.

#include

<windows.h>
#include <iostream>
#include <iomanip>
#import "msxml6.dll"

...

void sample()
{
CoInitialize(0);

{
MSXML2::IXMLDOMDocument2Ptr the_document;
the_document.CreateInstance(__uuidof(MSXML2::DOMDocument60));

_variant_t val(3);
MSXML2::IXMLDOMElementPtr the_element = the_document->createElement(L"doc");
the_document->documentElement = the_element;
the_element->setAttribute(L"attribute", val);

    // Output:
    //
    // XML:
    // <doc attribute="3"/>
    std::wcout << L"XML:" << std::endl << the_document->xml;
}

CoUninitialize();
}

Note that all interfaces will be released, and even the BSTR returned by the xml property is wrapper in a _bstr_t, so it's released when it goes out of scope. In fact, the extra pair of curly braces are there to make sure that everything gets release before the call to CoUninitialize.

Enjoy!