Hi, I am new to using the MSXML functions in C++. I found this on MSDN as
an example of what I wanted to do,
http://msdn2.microsoft.com/en-us/library/ms765465.aspx.
I have tried a number of XPATH examples to try and retrieve the
"><Code>124 55</Code>", but have been unable to do so. The MSDN example works
fine. So, I am wondering if it's a namespace issue?
Any help would be appreciated. Thanks. Jeff
I have changed the code as follows:
int _tmain(int argc, _TCHAR* argv[])
{
CString sResponse = "<?xml version=\"1.0\" encoding=\"utf-8\" ?<string
xmlns=\"http://tempuri.org/\"><InquiryResp onse><Code>1245 5</Code></InquiryResponse ></string>";
//CString sResponse = "<?xml version=\"1.0\" ?><?xml:stylesh eet
type=\"text/xsl\" href=\"stock.xs l\"?><portfol io
xmlns:dt=\"urn: schemas-microsoft-com:datatypes\" <stock
exchange=\"nasd aq\" <name>new</name <symbol>zzzz</symbol <price
dt:dt=\"number\ ">20.313</price </stock <stock exchange=\"nyse \">
<name>zacx corp</name <symbol>ZCXM</symbol <price
dt:dt=\"number\ ">28.875</price </stock <stock exchange=\"nasd aq\">
<name>zaffyma t inc</name <symbol>ZFFX</symbol <price
dt:dt=\"number\ ">92.250</price </stock <stock exchange=\"nasd aq\">
<name>zysmerg y inc</name <symbol>ZYSZ</symbol <price
dt:dt=\"number\ ">20.313</price </stock></portfolio>";
BSTR bstr = sResponse.Alloc SysString();
BSTR bstr2 = '\0';
IXMLDOMDocument *pXMLDom=NULL;
IXMLDOMParseErr or *pXMLErr=NULL;
IXMLDOMNode *pNode=NULL;
VARIANT_BOOL status;
VARIANT var;
HRESULT hr;
CoInitialize(NU LL);
pXMLDom = DomFromCOM();
if (!pXMLDom)
goto clean;
// Load the XML string into the DOM Object
HRCALL(pXMLDom->loadXML(bstr , &status), "");
if (status!=VARIAN T_TRUE)
{
HRCALL(pXMLDom->get_parseError (&pXMLErr),"" );
HRCALL(pXMLErr->get_reason(&bs tr),"");
dprintf("Failed to load DOM from string. %S\n",
bstr);
goto clean;
}
HRCALL(pXMLDom->get_xml(&bstr2 ), "");
dprintf("XML DOM loaded from string:\n%S\n", bstr2);
Sleep(3000);
// Query a single node.
if (bstr2)
SysFreeString(b str2);
bstr2 = SysAllocString( L"//InquiryResponse/Code/*"); // Nothing
//bstr2 = SysAllocString( L"//InquiryResponse/*"); //Nothing
//bstr2 = SysAllocString( L"//*"); // Works
//bstr2 = SysAllocString( L"//string/InquiryResponse/Code"); // Nothing
//bstr2 = SysAllocString( L"//*"); // Too much info
HRCALL(pXMLDom->selectSingleNo de(bstr2, &pNode), "dom->selectSingleNo de:
");
if (!pNode)
{
ReportParseErro r(pXMLDom, "Calling selectSingleNod e ");
}
else
{
dprintf("Result from selectSingleNod e:\n");
if (bstr2)
SysFreeString(b str2);
HRCALL(pNode->get_nodeName(& bstr2)," get_nodeName ");
dprintf("Node, <%S>:\n", bstr2);
if (bstr)
SysFreeString(b str2);
HRCALL(pNode->get_xml(&bstr2 ), "get_xml: ");
dprintf("\t%S\n \n", bstr2);
Sleep(15000);
}
clean:
if (bstr) SysFreeString(b str);
if (&var) VariantClear(&v ar);
if (pXMLErr) pXMLErr->Release();
if (pXMLDom) pXMLDom->Release();
CoUninitialize( );
return 0;
}