xpath here

#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#import <msxml6.dll>


// Macro that calls a COM method returning HRESULT value.
#define CHK_HR(stmt)        do { hr=(stmt); if (FAILED(hr)) goto CleanUp; } while(0)


void queryNodesSmart()
{
MSXML2::IXMLDOMDocumentPtr pXMLDom;
HRESULT hr = pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER);
if (FAILED(hr)) 
{
printf("Failed to instantiate an XML DOM.\n");
return;
}


try
{
pXMLDom->async = VARIANT_FALSE;
pXMLDom->validateOnParse = VARIANT_FALSE;
pXMLDom->resolveExternals = VARIANT_FALSE;


if ( pXMLDom->load(L"data.xml") != VARIANT_TRUE)
{
CHK_HR(pXMLDom->parseError->errorCode);
printf("Failed to load DOM from stocks.xml.\n%s\n",
(LPCSTR)pXMLDom->parseError->Getreason());
}


// Query a single node.
MSXML2::IXMLDOMNodePtr pNode = pXMLDom->selectSingleNode(L"//stock[1]/*");
if (pNode)
{
printf("Result from selectSingleNode:\nNode, <%s>:\n\t%s\n\n",
(LPCSTR)pNode->nodeName, (LPCSTR)pNode->xml);
}
else
{
printf("No node is fetched.\n");
}


// Query a node-set.
MSXML2::IXMLDOMNodeListPtr pnl = pXMLDom->selectNodes(L"//stock[1]/*");
if(pnl)
{
printf("Results from selectNodes:\n");
for (long i = 0; i < pnl->length; i++)
{
pNode = pnl->item[i];
printf("Node (%d), <%s>:\n\t%s\n",
i, (LPCSTR)pNode->nodeName, (LPCSTR)pnl->item[i]->xml);
}
}
else
{
printf("No node set is fetched.\n");
}
}
catch (_com_error errorObject)
{
printf("Exception thrown, HRESULT: 0x%08x", errorObject.Error());
}


CleanUp:
return;
}


int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
queryNodesSmart();
CoUninitialize();
}
return 0;


}

原文地址:https://www.cnblogs.com/eaglezzb/p/4176518.html