这是我之前编写的代码,稍加修改,添加了 20000 个“子”元素:),效果很好。
extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,
LPTSTR /*lpCmdLine*/, int nShowCmd)
{
CoInitialize(NULL);
{
//declare string pointer
_bstr_t markup;
//initialize markup to some well formed XML <-
//declare and initialize XML Document
try {
MSXML2::IXMLDOMDocument2Ptr pXMLDoc;
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
pXMLDoc->async = VARIANT_FALSE;
pXMLDoc->validateOnParse = VARIANT_TRUE;
pXMLDoc->preserveWhiteSpace = VARIANT_TRUE;
//load markup into XML document
VARIANT_BOOL vtBoolResult = pXMLDoc->loadXML(L"<XML></XML>");
for (int i = 0; i < 20000; i++) {
MSXML2::IXMLDOMNodePtr node = pXMLDoc->createNode(_variant_t("element"), _bstr_t("child"), _bstr_t(""));
if (node)
pXMLDoc->documentElement->appendChild(node);
}
//do some changes to the XML file<-
//get back string from XML doc
markup = pXMLDoc->Getxml(); //<-- th
ATLTRACE("XML lenght = %d, xml=%S\n", markup.length(), (BSTR)markup.GetBSTR());
} catch(_com_error e) {
ATLTRACE("error = %S\n", (BSTR)e.ErrorMessage());
}
}
CoUninitialize();
return _AtlModule.WinMain(nShowCmd);
}
这会在调试器中产生一个 1024 输出行,但如果您愿意,这可以轻松地将 xml 打印到 stdoutput。这是我到目前为止得到的输出
'getxmltest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_5cdbaa5a083979cc\comctl32.dll'
XML lenght = 160013, xml=<XML><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><child/><'getxmltest.exe': Unloaded 'C:\Windows\SysWOW64\msxml3.dll'
The program '[4884] getxmltest.exe: Native' has exited with code 0 (0x0).