Como obter o conteúdo de uma tag XML utilizando xPath - VB6

Após diversas tentativas frustradas e complexas de utilizar xPath em VB6 , acabamos por desenvolver uma OCX gratuita onde é possível utilizar xPath de forma simplificada. Apesar de desenvolvida para ser utilizada em VB6 é possível utilizar em qualquer linguagem que consiga consumir uma OCX .

Como instalar:

Realize o download da OCX no final do post, movendo para a SysWow64 -> S.O. x64 ou System32 -> S.O. x86 e registre utilizando o regsvr32 . Logo após deve referenciar essa OCX em seu projeto( Project -> References -> xPathXML.ocx ).

Métodos disponiveis:

  • SelecionaNodeXML -> O método irá retornar a tag ou estrutura informada no primeiro parâmetro, com base no indice informado no segundo parâmetro, buscando estas informações no XML informado no terceiro parâmetro.
  • PercorreNodeXML -> O método irá retornar todas as ocorrências da tag ou estrutura informada no primeiro parâmetro, separadas pelo delimitador definido no segundo parâmetro, buscando estas informações no XML informado no terceiro parâmetro.

XML utilizado para testes:

 <retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#">
    <tpAmb>2</tpAmb>
    <verAplic>GO3.0</verAplic>
    <cStat>103</cStat>
    <xMotivo>Lote recebido com sucesso</xMotivo>
    <cUF>52</cUF>
    <dhRecbto>2015-03-18T11:15:24-03:00</dhRecbto>
    <infRec>
        <nRec>521000010289495</nRec>
        <nRec>521000010289495</nRec>
        <nRec>521000010289495</nRec>
        <tMed>2</tMed>
    </infRec>
</retEnviNFe> 

SelecionaNodeXML exemplo de utilização:

     Dim XMLDoc As XPathXml.XPathXml
    Set XMLDoc = New XPathXml.XPathXml
    
    edtTesteTag.Text = XMLDoc.SelecionaNodeXml("nRec", 0, mmXml.Text) 

PercorreNodeXML exemplo de utilização:

     Dim XMLDoc As XPathXml.XPathXml
    Set XMLDoc = New XPathXml.XPathXml
    Dim i As Integer
    Dim vetor As Variant
    
    vetor = Split(XMLDoc.PercorreNodeXML("nRec", "|", mmXml.Text), "|")
    cbbTesteTag.Clear
    
    For i = LBound(vetor) To UBound(vetor)
        cbbTesteTag.AddItem vetor(i)
    Next 

Obtendo atributo de uma tag:

     Dim XMLDoc As XPathXml.XPathXml
    Set XMLDoc = New XPathXml.XPathXml
    
    edtTesteTag.Text = XMLDoc.SelecionaNodeXML("retEnviNFe/@versao", 0, mmXml.Text)
    ou
    edtTesteTag.Text = XMLDoc.SelecionaNodeXML("@versao", 0, mmXml.Text) 

OCX e Exemplo de utilização anexados logo abaixo.
https://tsdn.tecnospeed.com.br/files/render/a/d1bA1YExdQc/m/2Aal0HUq8WfaoMbCJXVjsCp1gbKWDONcJmsewKMB3YfVHfqBRMt4Z30DjOvQgJkfk6NI1dQW2Fg

https://tsdn.tecnospeed.com.br/files/render/a/d1bA1YExdQc/m/2Aal0HUq8WdpEWeYeAaOv23QOsnfWODue1p7fd688DUlyaYr3Kns7wlT7TWj6YHvLACX3jXbRv8