C++ XML编程

1. How to use MSXML2 in C++?

First, we should import the "msxml6.tlb" file, the code as below:

  #import "..\Common\msxml6.tlb" raw_interfaces_only exclude("ISchemaElement", "ISchemaAttribute")

Then we can use the MSXML2 interfaces now, take for an example:

CoInitialize(NULL);

HRESULT hr = S_OK;

MSXML2::IXMLDOMDocument2Ptr spDoc = NULL;
hr = ::CoCreateInstance(__uuidof(MSXML2::DOMDocument60), 
                            NULL, 
                            CLSCTX_ALL,
                            __uuidof(MSXML2::IXMLDOMDocument2), 
                            (void**)&spDoc);
    if(FAILED(hr) || NULL == spDoc)
       return -1;

//....
sp->load(...);

sp->get_sirstChild(...);

sp->get_xml();

 2. How to use XmlLite in C++?

  MSDN Linker: http://msdn.microsoft.com/en-us/library/windows/desktop/ms752838(v=vs.85).aspx

HRESULT hr = S_OK;

   // Create reader.
   CComPtr<IXmlReader> spReader;
   hr = ::CreateXmlReader(__uuidof(IXmlReader),
                          reinterpret_cast<void**>(&spReader), 
                          0);
   if(FAILED(hr) || NULL == spReader)
      return;

   // Set input storage.
   CComPtr<IStream> spStream;
   hr = spReader->SetInput(spStream);
   if(FAILED(hr) || NULL == spStream)
      return;

   //spStream->Read

   // Enum node.
   XmlNodeType nodeType = XmlNodeType_None;
   while(S_OK == (hr = spReader->Read(&nodeType)))
   {
      UINT lineNum = 0;
      if(FAILED(spReader->GetLineNumber(&lineNum)))
         continue;
   }

   // Enum current node's attributes.
   for(hr = spReader->MoveToFirstAttribute();
       S_OK == hr;
       hr = spReader->MoveToNextAttribute())
   {
      LPCWSTR attValue;
      if(FAILED(spReader->GetValue(&attValue, NULL)))
         continue;
   }
原文地址:https://www.cnblogs.com/nchxmoon/p/2880306.html