65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.33/5 (6投票s)

2003 年 4 月 18 日

CPOL
viewsIcon

66331

downloadIcon

226

在 Pocket PC 上使用 XML 几乎和在桌面电脑上一样简单。你只需要进行一些特殊的调用,瞧,就完成了!

Sample Image - CETreeView.jpg

引言

这是 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 这里,效果很好。

© . All rights reserved.