65.9K
CodeProject is changing. Read more.
Home

How to load a tree view with a large XML file (Pocket PC version of Frank Le's program)

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.33/5 (6 votes)

Apr 18, 2003

CPOL
viewsIcon

65812

downloadIcon

212

Using XML on the Pocket PC is almost as easy as on a Desktop. You only need to make a few magic calls and voila, you have it!

Sample Image - CETreeView.jpg

Introduction

This is the Pocket PC version of Frank Le's, "How to load a tree view with a large XML file". I got permission from Frank to post the CE or Pocket PC version of his program. It's been a couple of months after I implemented the Pocket PC version and never had time, until now, to document and upload it. It's now over a year later, so here goes.

Initializing COM:

hr = CoInitializeEx(NULL,COINIT_MULTITHREADED);

Next, the following bit of code must be executed. But I don't remember why. It's something about document safety options. If someone does know, please post the reason.

/* 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 );
 }

The following code uses the FileStream to load an XML file into the DOM. You need to get the FileStream.h file for this (included in the zip file).

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;

Lastly,

node->hasChildNodes()

is replaced with:

VARIANT_BOOL vbHasChild;
  node->hasChildNodes(&vbHasChild);
  if (vbHasChild) {

I have forgotten why, and it may not be necessary. The code does work though. I have included an ARM exe with the zip file.

I used the DOM in some of my programs here and it worked pretty well.