LoadDOM.cpp源代码

来源:互联网 发布:tm域名 编辑:程序博客网 时间:2024/05/21 06:24

LoadDOM.cpp源代码

这个C/C++源代码以下几个执行步骤:

1、  创建一个XML DOM对象并将其设置为同步模式。

2、  pXMLDom中调用load方法,指定stocks.xml的路径。

添加loadDOM.cpp 到工程

1、  创建一个新的C++源文件。如何创建的详细阐述请参照——建立我的VisualC++项目。将文件命名为loadDOM.cpp

2、  将以上C/C++代码拷贝并粘贴到你刚刚创建的文件中。

3、  接下来我们添加stocks.xml源文件。

C/C++源文件(loadDom.cpp

#include <stdio.h>

#include <windows.h>

#import <msxml3.dll> raw_interfaces_only

using namespace MSXML2;

 

// Macro that calls a COM method returning HRESULT value:

#define HRCALL(a, errmsg) /

do { /

    hr = (a); /

    if (FAILED(hr)) { /

        dprintf( "%s:%d  HRCALL Failed: %s/n  0x%.8x = %s/n", /

                __FILE__, __LINE__, errmsg, hr, #a ); /

        goto clean; /

    } /

} while (0)

 

// Helper function that put output in stdout and debug window

// in Visual Studio:

void dprintf( char * format, ...)

{

    static char buf[1024];

    va_list args;

    va_start( args, format );

    vsprintf( buf, format, args );

    va_end( args);

    OutputDebugStringA( buf);

    printf("%s", buf);

}

 

// Helper function to create a DOM instance:

IXMLDOMDocument * DomFromCOM()

{

   HRESULT hr;

   IXMLDOMDocument *pxmldoc = NULL;

 

    HRCALL( CoCreateInstance(__uuidof(DOMDocument30),

                  NULL,

                  CLSCTX_INPROC_SERVER,

                  __uuidof(IXMLDOMDocument),

                  (void**)&pxmldoc),

                  "Create a new DOMDocument");

 

    HRCALL( pxmldoc->put_async(VARIANT_FALSE),

            "should never fail");

    HRCALL( pxmldoc->put_validateOnParse(VARIANT_FALSE),

            "should never fail");

    HRCALL( pxmldoc->put_resolveExternals(VARIANT_FALSE),

            "should never fail");

 

   return pxmldoc;

clean:

   if (pxmldoc)

    {

         pxmldoc->Release();

    }

    return NULL;

}

 

 

int main(int argc, char* argv[])

{

   IXMLDOMDocument *pXMLDom=NULL;

   IXMLDOMParseError *pXMLErr=NULL;

   BSTR bstr = NULL;

   VARIANT_BOOL status;

   VARIANT var;

   HRESULT hr;

 

   CoInitialize(NULL);

 

   pXMLDom = DomFromCOM();

   if (!pXMLDom) goto clean;

 

   VariantInit(&var);

   V_BSTR(&var) = SysAllocString(L"stocks.xml");

   V_VT(&var) = VT_BSTR;

   HRCALL(pXMLDom->load(var, &status), "");

 

   if (status!=VARIANT_TRUE) {

      HRCALL(pXMLDom->get_parseError(&pXMLErr),"");

      HRCALL(pXMLErr->get_reason(&bstr),"");

      dprintf("Failed to load DOM from stocks.xml. %S/n",

               bstr);

      goto clean;

   }

   HRCALL(pXMLDom->get_xml(&bstr), "");

   dprintf("XML DOM loaded from stocks.xml:/n%S/n",bstr);

 

clean:

   if (bstr) SysFreeString(bstr);

   if (&var) VariantClear(&var);

   if (pXMLErr) pXMLErr->Release();

   if (pXMLDom) pXMLDom->Release();

 

   CoUninitialize();

   return 0;

}