如何使用 C++ 仅检索/解析 2 个或更多 xml 的某些特定节点。
void queryNodes()
{
HRESULT hr = S_OK;
IXMLDOMDocument *pXMLDom = NULL;
IXMLDOMNodeList *pNodes = NULL;
IXMLDOMNode *pNode = NULL;
IXMLDOMNode *pNode1 = NULL;
BSTR bstrQuery1 = NULL;
BSTR bstrQuery2 = NULL;
BSTR bstrNodeName = NULL;
BSTR bstrNodeValue = NULL;
VARIANT_BOOL varStatus;
VARIANT varFileName;
VariantInit(&varFileName);
//<siteid>123</siteid>
CHK_HR(CreateAndInitDOM(&pXMLDom));
CHK_HR(VariantFromString(L"stocks.xml", varFileName));
CHK_HR(pXMLDom->load(varFileName, &varStatus));
if (varStatus != VARIANT_TRUE)
{
CHK_HR(ReportParseError(pXMLDom, "Failed to load DOM from stocks.xml."));
}
// Query a single node.
//bstrQuery1 = SysAllocString(L"//rebootexclusiondata[2]/*");
bstrQuery1 = SysAllocString(L"//rebootexclusiondata//exclusion//");
CHK_ALLOC(bstrQuery1);
CHK_HR(pXMLDom->selectSingleNode(bstrQuery1, &pNode));
if (pNode)
{
printf("Result from selectSingleNode:\n");
CHK_HR(pNode->get_nodeName(&bstrNodeName));
CHK_HR(pNode->get_xml(&bstrNodeValue));
SysFreeString(bstrNodeName);
printf("Node, <%S>:\n", bstrNodeName);
printf("\t%S\n%S\n", bstrNodeValue);
if (0 == wcscmp(bstrNodeValue, L"<exclusion>true</exclusion>"))
{
printf("\n exe exit \n\n");
}
else
{
printf("\n go further! lets reboot the system\n\n");
}
SysFreeString(bstrNodeValue);
SAFE_RELEASE(pNode);
}
}
在这种情况下,它只检查 1 个标记,即排除标记,与排除标记类似,它还必须同时检查 xml 中的另一个标记。我该怎么做呢。