代码之家  ›  专栏  ›  技术社区  ›  cbrulak

在C++中用MSXML4解析XML文件的问题

  •  0
  • cbrulak  · 技术社区  · 16 年前

    这是我的解析代码:

    MSXML2::IXMLDOMNodePtr pNode = m_pXmlDoc->selectSingleNode(kNameOfChild.c_str());
    
    MSXML2::IXMLDOMNodeListPtr pIDOMNodeList = NULL;
    MSXML2::IXMLDOMNodePtr pIDOMNode = NULL;
    long numOfChildNodes= 0;
    BSTR bstrItemText;
    HRESULT hr;
    
    MSXML2::IXMLDOMElementPtr pChildNode = m_pXmlDoc->getElementsByTagName(kNameOfChild.c_str());
    
    
    hr  = m_pXmlDoc->get_childNodes(&pIDOMNodeList);
    
    hr = pIDOMNodeList->get_length(&numOfChildNodes);
    

    我的XML文件:

    <?xml version="1.0"?>
    <GovTalkMessage>
    <EnvelopeVersion>1.0</EnvelopeVersion>
    <Header>
      <MessageDetails>
         <Class>MOSWTSC2</Class>
         <Qualifier>acknowledgement</Qualifier>
         <Function>submit</Function>
         <TransactionID>20021202ABC</TransactionID>
         <CorrelationID>B07B9ED3176193DDC4EC39063848A927</CorrelationID>
         <ResponseEndPoint PollInterval="10">
          https://secure.gateway.gov.uk/poll
         </ResponseEndPoint>
         <GatewayTimestamp>2001-01-31T10:20:18.345</GatewayTimestamp>
      </MessageDetails>
      <SenderDetails/>
     </Header>
    <GovTalkDetails>
       <Keys/>
    </GovTalkDetails>
    <Body/>
    </GovTalkMessage>
    
    • knameofchild是“限定符”
    • pnode始终为空
    • pChildNode始终为空
    • 人力资源报酬 S_OK
    • numOfChildNodes始终为0

    那么,我做错了什么? 谢谢

    2 回复  |  直到 16 年前
        1
  •  1
  •   Luke    16 年前

    尝试使用/govtalkmessage/header/messagedetails/qualifier进行xpath查询。

        2
  •  0
  •   Naveen    16 年前

    您需要为selectsinglenode调用提供xpath。XML文件中可能存在多个“限定符”,因此,如果您只是传递“限定符”,解析器将不知道返回哪个限定符。我使用xpath的次数不多,但我认为这个字符串应该适用于查询:“header/messagedetails[0]/qualifier”