0

如何使用 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 中的另一个标记。我该怎么做呢。

4

0 回答 0