如何加载一个大型XML文件的树视图(Frank Le程序的Pocket PC版本)






3.33/5 (6投票s)
在 Pocket PC 上使用 XML 几乎和在桌面电脑上一样简单。你只需要进行一些特殊的调用,瞧,就完成了!
引言
这是 Frank Le 的“如何用大型 XML 文件加载树形视图”的 Pocket PC 版本。我已获得 Frank 的许可,发布他程序的 CE 或 Pocket PC 版本。在我实现 Pocket PC 版本后已经过了几个月,直到现在才有时间记录并上传它。现在已经一年多过去了,开始吧。
初始化 COM
hr = CoInitializeEx(NULL,COINIT_MULTITHREADED);
接下来,必须执行以下代码片段。但我记不清原因了。这与文档安全选项有关。如果有人知道原因,请发帖说明。
/* Pocket PC workaround: Remove document safety options */ IObjectSafety* pSafety; DWORD dwSupported, dwEnabled; if ( SUCCEEDED(document->QueryInterface( IID_IObjectSafety, (void**)&pSafety ) ) ) { pSafety->GetInterfaceSafetyOptions(MSXML::IID_IXMLDOMDocument, &dwSupported, &dwEnabled ); pSafety->SetInterfaceSafetyOptions(MSXML::IID_IXMLDOMDocument, dwSupported, 0 ); }
以下代码使用 FileStream
将 XML 文件加载到 DOM 中。你需要获取 FileStream.h 文件(包含在压缩文件中)。
VARIANT vXMLSrc; VARIANT_BOOL vSuccess; VariantInit( &vXMLSrc ); /* to load an XML file from a local file use the following code */ FileStream* fs = new FileStream; fs->open(strPathName); vXMLSrc.punkVal = fs; vXMLSrc.vt = VT_UNKNOWN; hr = document->load(vXMLSrc, &varOkay); if (FAILED(hr)) return FALSE;
最后,
node->hasChildNodes()
被替换为
VARIANT_BOOL vbHasChild; node->hasChildNodes(&vbHasChild); if (vbHasChild) {
我忘记了原因,而且可能不是必需的。但代码确实有效。我已在压缩文件中包含了一个 ARM 可执行文件。
我在一些程序中使用了 DOM 这里,效果很好。