MSXML3.0以上才提供对SAXXMLReader,直接上代码:
void SaveToXmlFile( MSXML2::IXMLDOMDocumentPtr docPtr,const wchar_t* XmlFileName )
{
HRESULT hr = S_OK;
MSXML2::IMXWriterPtr pWriter(__uuidof(MSXML2::MXXMLWriter));
MSXML2::ISAXXMLReaderPtr pReader(__uuidof(MSXML2::SAXXMLReader));
pReader->putContentHandler((MSXML2::ISAXContentHandlerPtr)pWriter);
pReader->putDTDHandler((MSXML2::ISAXDTDHandlerPtr)pWriter);
pReader->putErrorHandler((MSXML2::ISAXErrorHandlerPtr)pWriter);
pWriter->put_indent(VARIANT_TRUE);
pWriter->put_byteOrderMark(VARIANT_TRUE);
pWriter->put_standalone( VARIANT_TRUE );
pWriter->put_disableOutputEscaping( VARIANT_TRUE );
IStream* pStream = NULL;
DWORD grfMode = STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE;
hr = SHCreateStreamOnFileW(XmlFileName, grfMode, &pStream);
if (SUCCEEDED(hr))
{
_variant_t v = pStream;
hr = pWriter->put_output(v);
if (SUCCEEDED(hr))
{
hr = pReader->parse((_variant_t)docPtr.GetInterfacePtr());
if (SUCCEEDED(hr))
pWriter->flush();
}
pStream->Release();
}
}
参考文章:http://www.cppblog.com/fwxjj/archive/2008/02/02/42411.html
PS:代码不是本人所写,一个前辈的,借用一下,贡献出来,希望对别的童鞋有帮助。