LER ARQUIVO XML COM FIELD E VALUE

 Tópico anterior Próximo tópico Novo tópico

LER ARQUIVO XML COM FIELD E VALUE

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#497562 - 19/07/2021 21:26:35

DACTUSSUPORTE
CURITIBA
Cadast. em:Julho/2021


Ola Pessoal..
Estou precisando importar duas linhas de um retorno de um modelo de xml com Field e Value.
Não estou sabendo fazer a função. Por favor não reparem no código pois estou patinando mesmo e o que estou colando por aqui já foi tentando de diversas formas, sobrando apenas a ideia.
Segue trecho do XML que estou recebendo de retorno:
<API>
<Record Num='1'>
<Field Name='COMANDO' Value='I'/>
<Field Name='NOMECAT' Value='ARREFECIMENTO'/>
<Field Name='CODPROD' Value='1'/>
<Field Name='CODBARRASPROD' Value='7899912801170'/>
<Field Name='NOMEPROD' Value='ADITIVO RADIADOR CONC. CLASSICO HIBRIDO LEVE ROSA 1X1000ML'/>
<Field Name='IDPRODUTO' Value='7592782'/>
</Record>
<Record Num='2'>
<Field Name='COMANDO' Value='I'/>
<Field Name='NOMECAT' Value='ARREFECIMENTO'/>
<Field Name='CODPROD' Value='2'/>
<Field Name='CODBARRASPROD' Value='7899912801248'/>
<Field Name='NOMEPROD' Value='ADITIVO RADIADOR CONC. CLASSICO HIBRIDO TRUCK ROSA 1X1000ML'/>
<Field Name='IDPRODUTO' Value='7592783'/>
</Record>
<Record Num='3'>
<Field Name='COMANDO' Value='I'/>
<Field Name='NOMECAT' Value='ARREFECIMENTO'/>
<Field Name='CODPROD' Value='3'/>
<Field Name='CODBARRASPROD' Value='7899912800036'/>
<Field Name='NOMEPROD' Value='ADITIVO RADIADOR CONC. ORGÂNICO PLUS ROSA 1X1000ML'/>
<Field Name='IDPRODUTO' Value='7592784'/>
</Record>
</Records>

Preciso capturar dois Field Name: CODPROD e IDPRODUTO.
Para isso comecei a construir essa função abaixo.... para depois poder fazer meu codigo de update em minhas tabelas.

Private Sub retornoAPI()
Dim xmlDoc As DOMDocument
Dim objNodeList   As IXMLDOMNodeList
Dim codERP        As String
Dim codLoja       As String
Dim I             As Long
Dim XMLurl        As String
Dim qtdeReg       As Long

Set xmlDoc = New DOMDocument
XMLurl = 'c:\RetornoAPI.XML'
    
xmlDoc.async = False
    
If xmlDoc.Load(XMLurl) = False Then
    MsgBox ('Não Foi Possível Ler o XML')
    Exit Sub
Else
    Set objNodeList = xmlDoc.selectNodes('Record')
    
    qtdeReg = XMLdoc.getElementsByTagName('Record').Length
    
    For Each I = 1 To qtdeReg -1
        codERP  = CStr(XMLdoc.selectNodes(Field).Item(i).selectNodes('CODPROD').Item(0).text)
        codLoja  = CStr(XMLdoc.selectNodes(Field).Item(i).selectNodes('IDPRODUTO').Item(0).text)
    Next I
End If
End Sub



#497563 - 19/07/2021 21:35:03

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
O XML não parece correto. Existem tags abertas e não fechadas e também tags fechadas que nunca foram abertas.
API por exemplo, nunca fechou e Records nunca abriu.
Corrigindo isso é barbadinha:

' using System.Xml.Serialization;
' XmlSerializer serializer = new XmlSerializer(typeof(API));
' using (StringReader reader = new StringReader(xml))
' {
'    var test = (API)serializer.Deserialize(reader);
' }

<XmlRoot(ElementName:='Field')>
Public Class Field
    <XmlAttribute(AttributeName:='Name')>
    Public Property Name As String
    <XmlAttribute(AttributeName:='Value')>
    Public Property Value As String
End Class

<XmlRoot(ElementName:='Record')>
Public Class Record
    <XmlElement(ElementName:='Field')>
    Public Property Field As List(Of Field)
    <XmlAttribute(AttributeName:='Num')>
    Public Property Num As Integer
End Class

<XmlRoot(ElementName:='Records')>
Public Class Records
    <XmlElement(ElementName:='Record')>
    Public Property Record As List(Of Record)
End Class

<XmlRoot(ElementName:='API')>
Public Class API
    <XmlElement(ElementName:='Records')>
    Public Property Records As Records
End Class



_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#497564 - 20/07/2021 09:13:31

DACTUSSUPORTE
CURITIBA
Cadast. em:Julho/2021


Olá colega,
Realmente o XML eu copiei partes, mas ele tem essas tags de inicio e fim, é que era mais de 2mil linhas e ai peguei em pedaços.
Quanto ao seu codigo acima esta em VB6 mesmo? Pois sou um pouco enferrujado nessa linguagem, costumo fazer function ou sub.
Obrigado pela atenção?



#497565 - 20/07/2021 10:31:14

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Ah, não... é VB.NET

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#497567 - 20/07/2021 12:15:54

DACTUSSUPORTE
CURITIBA
Cadast. em:Julho/2021


Blz, obrigado mesmo assim... Mas aguardo ai uma ajuda em Vb6.
Valeu!



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário