/child[@name="C:"]//*/../child[@system="true"] 在XMLSpy中显示是Valid的XPath.msxml4.0也支持这个XPath, 但是msxml3.0不支持。我想问一下msxml3.0和msxml4.0有什么区别,为什么msxml3.0不支持?我的测试code如下:
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
HRESULT hr = S_OK;
CComPtr <IXMLDOMDocument> xmlDomDoc;
CComPtr <IXMLDOMNodeList> nodeList;
WCHAR xPath[256] =
L"/child[@name=\"C:\"]//*/../child[@system=\"true\"]"; hr = xmlDomDoc.CoCreateInstance (L"MSXML2.DOMDocument.3.0", NULL,
CLSCTX_INPROC_SERVER); if (SUCCEEDED (hr))
{
xmlDomDoc->put_async(VARIANT_FALSE);
xmlDomDoc->put_validateOnParse(VARIANT_FALSE);
xmlDomDoc->put_resolveExternals(VARIANT_FALSE);
xmlDomDoc ->selectNodes (CComBSTR (xPath), &nodeList); if (NULL == nodeList.p)
{
printf ("invalid xpath\r\n");
}
else
{
printf ("valid xpath\r\n");
}
nodeList.Release ();
xmlDomDoc.Release ();
}
CoUninitialize();
return 0;
}msxml3.0 输出 invalid xpath.
msxml4.0 输出 valid xpath.
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
HRESULT hr = S_OK;
CComPtr <IXMLDOMDocument> xmlDomDoc;
CComPtr <IXMLDOMNodeList> nodeList;
WCHAR xPath[256] =
L"/child[@name=\"C:\"]//*/../child[@system=\"true\"]"; hr = xmlDomDoc.CoCreateInstance (L"MSXML2.DOMDocument.3.0", NULL,
CLSCTX_INPROC_SERVER); if (SUCCEEDED (hr))
{
xmlDomDoc->put_async(VARIANT_FALSE);
xmlDomDoc->put_validateOnParse(VARIANT_FALSE);
xmlDomDoc->put_resolveExternals(VARIANT_FALSE);
xmlDomDoc ->selectNodes (CComBSTR (xPath), &nodeList); if (NULL == nodeList.p)
{
printf ("invalid xpath\r\n");
}
else
{
printf ("valid xpath\r\n");
}
nodeList.Release ();
xmlDomDoc.Release ();
}
CoUninitialize();
return 0;
}msxml3.0 输出 invalid xpath.
msxml4.0 输出 valid xpath.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货