MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

2 participantes

    [Resolvido]Como importar arquivo xml

    avatar
    enio.eltz
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 19/07/2016

    [Resolvido]Como importar arquivo xml Empty [Resolvido]Como importar arquivo xml

    Mensagem  enio.eltz 27/5/2021, 12:50

    Bom dia

    Estou tentando ler um arquivo XML que é o resultado de uma consulta SOAP em um Web Server. A busca dos dados no Web Server está operando. No link abaixo tem o tópico onde fiz o código da busca.

    https://www.maximoaccess.com/t39628-resolvidocomo-usar-uma-variavel-em-uma-consulta-soap

    A resposta da consulta é essa:

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://meu_servidor/webservice/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
     <SOAP-ENV:Body>
     <ns1:RetornaClientePorNomeResponse>
     <return xsi:type="ns1:ClienteEstrutura">
     <id xsi:type="xsd:int">149</id>
     <nome xsi:type="xsd:string">ENIO ELTZ FILHO</nome>
     <bairro xsi:type="xsd:string">Mundo Novo</bairro>
     <cidade xsi:type="xsd:string">7989</cidade>
     <estado xsi:type="xsd:string">RS</estado>
     <cnpj xsi:type="xsd:string"></cnpj>
     <inscricao_estadual xsi:type="xsd:string"></inscricao_estadual>
     <inscricao_municipal xsi:type="xsd:string"></inscricao_municipal>
     <revenda xsi:type="xsd:int">0</revenda>
     <max_cps xsi:type="xsd:int">0</max_cps>
     <max_chamadas_simult xsi:type="xsd:int">0</max_chamadas_simult>
     <prepaid_mode xsi:type="xsd:int">0</prepaid_mode>
     <cep xsi:type="xsd:string"></cep>
     <cota_diaria_consumo xsi:nil="true"/>
     <cota_mensal_consumo xsi:nil="true"/>
     <tipo_cobranca xsi:nil="true"/>
     <bloqueia_prejuizo xsi:nil="true"/>
     <expira_saldo xsi:nil="true"/>
     <id_externo_cliente xsi:type="xsd:string"></id_externo_cliente>
     </return>
     </ns1:RetornaClientePorNomeResponse>
     </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    Meu objetivo é ler nestes dados o valor 149 da tag id, mas ainda não consegui. Eu estou fazendo a consulta e os dados retornados estão sendo escritos em uma caixa de texto (fiz isso para ver se a consulta está OK).

    Uma questão que não ficou clara para mim é se essa estrutura de resposta seria um XSD, como já li em algumas pesquisas que eu fiz.

    Fiz algumas pesquisas aqui no fórum para ver se há algo semelhante mas não identifiquei.

    Desde já agradeço o apoio.

    Enio Eltz Filho.
    Eloirp
    Eloirp
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 215
    Registrado : 15/06/2013

    [Resolvido]Como importar arquivo xml Empty Re: [Resolvido]Como importar arquivo xml

    Mensagem  Eloirp 29/5/2021, 19:49

    busque por Application.ImportXML
    muito fácil de usar
    avatar
    enio.eltz
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 19/07/2016

    [Resolvido]Como importar arquivo xml Empty Re: [Resolvido]Como importar arquivo xml

    Mensagem  enio.eltz 16/6/2021, 13:51

    Olá

    Eloirp, obrigado pela informação. Eu fiz alguns testes com o Apllication.ImportXML mas sem sucesso. Talvez porque eu não tenha me expressado da forma correta.

    Com Application.ImportXML "caminho_do_arquivo", acStructureAndData eu consegui importar e o Access cria uma tabela nova com estrutura e dados. Mas o objetivo não é bem esse, e eu não tenho um "arquivo".

    Nos testes que estou realizando, os dados a serem importados são resultado de uma consulta em um Web Server. Não há um arquivo salvo em um diretório.

    Eu estou conseguindo realizar a consulta e escrever o resultado em uma caixa de texto, para ter certeza da consulta. A questão é buscar os valores no resultado da consulta e escrever em uma tabela. Como escrever em tabela eu sei fazer. Não estou conseguindo é trabalhar com o resultado da consulta, que não é um arquivo salvo em um diretório.

    O código que eu estou usando para trabalhar com o resultado da consulta está abaixo. Não mandei o código da consulta em si pois está Ok.

    Código:
    Dim strTempBilSai As String
             Dim strUrl
            
                strUrl = "URL de acesso"
            
                Set xmlHttpBilSai = New MSXML2.XMLHTTP30

                With xmlHttpBilSai
                    .Open "POST", strUrl, False
                    .setRequestHeader "Content-Type", "text/xml; charset=utf-8"
                    .setRequestHeader "Content-Length", "Length"
                    .send strEnv
                End With
            
                If CLng(xmlHttpBilSai.Status) < 300 Then
                    strTempBilSai = xmlHttpBilSai.responseText
                
                    'aqui eu inicio o tratamento dos dados              
                    
                    [Forms]![fml_ConsBilhetes]!cmp_ret_temp = strTempBilSai
                    
                    strTempBilSai = ""
                                    
                    Else
                    MsgBox ("ERRO NA IMPORTAÇÃO SAÍDA.")


    Eu tenho um exemplo comigo de como buscar nota XML que encontrei aqui no fórum, mas é baseado em arquivo salvo, que não é o caso aqui.
    Eu já tentei definir strTempBilSai com outros exemplos que achei na internet, mas sem sucesso.

    O resultado da consulta é esse:

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://meuip/webservice/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:RetornaListaCDRResponse><return xsi:type="ns1:CDRList"><total_registros xsi:type="xsd:int">7</total_registros><lista_cdr SOAP-ENC:arrayType="ns1:CDR[7]" xsi:type="ns1:CDRArray"><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">005551103414</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 13:58:27</datahora><regiao xsi:type="xsd:string">SERVICOS</regiao><duracao xsi:type="xsd:int">30</duracao><preco xsi:type="xsd:float">1.0E-6</preco><sipcode xsi:type="xsd:int">200</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">00555135419408</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 13:58:46</datahora><regiao xsi:type="xsd:string">FIXO 51 LOC</regiao><duracao xsi:type="xsd:int">30</duracao><preco xsi:type="xsd:float">0.0175</preco><sipcode xsi:type="xsd:int">200</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">005551981181862</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 13:59:02</datahora><regiao xsi:type="xsd:string">MOVEL 51</regiao><duracao xsi:type="xsd:int">30</duracao><preco xsi:type="xsd:float">0.05</preco><sipcode xsi:type="xsd:int">200</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">00555432860200</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 13:59:53</datahora><regiao xsi:type="xsd:string">FIXO NACIONAL</regiao><duracao xsi:type="xsd:int">30</duracao><preco xsi:type="xsd:float">0.0175</preco><sipcode xsi:type="xsd:int">200</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">005554999663322</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 14:00:06</datahora><regiao xsi:type="xsd:string">MOVEL NACIONAL</regiao><duracao xsi:type="xsd:int">0</duracao><preco xsi:type="xsd:float">0</preco><sipcode xsi:type="xsd:int">487</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">0055800310800</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 14:00:10</datahora><regiao xsi:type="xsd:string">0800</regiao><duracao xsi:type="xsd:int">0</duracao><preco xsi:type="xsd:float">0</preco><sipcode xsi:type="xsd:int">503</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item><item xsi:type="ns1:CDR"><origem xsi:type="xsd:string">6997@meuip</origem><destino xsi:type="xsd:string">00558000310800</destino><contaCobranca xsi:type="xsd:string">6997@meuip</contaCobranca><datahora xsi:type="xsd:string">2021-05-28 14:00:22</datahora><regiao xsi:type="xsd:string">0800 FLUX STFC</regiao><duracao xsi:type="xsd:int">30</duracao><preco xsi:type="xsd:float">1.0E-6</preco><sipcode xsi:type="xsd:int">200</sipcode><nomeDisplay xsi:type="xsd:string"></nomeDisplay></item></lista_cdr><status xsi:type="xsd:string"></status></return></ns1:RetornaListaCDRResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

    Os dados a serem buscados são separados pela tag item.

    Se alguém tem algum exemplo ou dica, agradeço desde já
    avatar
    enio.eltz
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 19/07/2016

    [Resolvido]Como importar arquivo xml Empty Re: [Resolvido]Como importar arquivo xml

    Mensagem  enio.eltz 16/6/2021, 21:17

    Olá

    Fiz mais alguns testes e consegui resolver a situação salvando o resultado da consulta em um arquivo xml assim:

    Código:
                    XMLDoc.LoadXML xmlHttpBilSai.responseText 'faz XMLDoc como a resposta da consulta
                    XMLDoc.Save ("local + nome do arquivo") 'salva XMLDoc no diretório + nome arquivo

    Declarei XMLDoc assim:

    Código:
    Dim XMLDoc As New DOMDocument

    E então carreguei o arquivo e li os valores necessários pelas tag. Usei um código de importação de NFe que eu já tinha (criado aqui no fórum por FabioPaes) e usando a função abaixo para separar entre duas stirngs criado por Alvaro Teixera.

    Código:
    Function SeparaEntreDuasStringsXML(strTotal As String, strInicio As String, strFim As String)
    '                2014 Alvaro Teixeira                          '
    '                Adaptado por Fabio Paes                        '
    '          Em 12/02/2017 para MAXIMOACCESS                    '

    Dim strP As String
    On Error Resume Next
    Dim i As Long, j As Long
    i = InStr(strTotal, strInicio)
        'Aqui ele separa o Texto para determinar o Fim da Extração.
        strP = Mid(strTotal, i + (Len(strInicio)), Len(strTotal))
        j = InStr(strP, strFim)
        SeparaEntreDuasStringsXML = Mid(strTotal, i + Len(strInicio), j - 1)
        If Nz(Len(SeparaEntreDuasStringsXML), 0) = 0 Then
            SeparaEntreDuasStringsXML = 0
        End If
    End Function

    Obrigado!!!!

      Data/hora atual: 1/8/2021, 10:45