none
Como ler arquivo XML carregado em um MemoryStream? RRS feed

  • Pergunta

  • Já tentei da seguinte forma, mas deu errado:

    Dim oXML As New XmlDocument()
    Dim ms As New MemoryStream
    
    Using zip As ZipFile = ZipFile.Read(CaminhoArquivo)
        Dim Arquivo As ZipEntry
        For Each Arquivo In zip
            Arquivo.Extract(ms)
        Next
    End Using
    
    oXML.Load(ms)
    Alguém pode me ajudar?

    sábado, 24 de junho de 2017 20:31

Respostas

  • Consegui resolver o problema da seguinte maneira:

    Dim oXML As New XmlDocument()
    Dim ms As New MemoryStream()
    
    Using zip As ZipFile = ZipFile.Read(NomeArquivo)
            Dim Arquivo As ZipEntry
            For Each Arquivo In zip
                    Arquivo.Extract(ms)
            Next
    End Using
    
    'carrega o arquivo XML
    Dim r As String = Text.Encoding.UTF8.GetString(ms.ToArray())
    
    oXML.LoadXml(r)

    • Marcado como Resposta EricJhon92 sexta-feira, 8 de setembro de 2017 17:10
    sexta-feira, 8 de setembro de 2017 17:10

Todas as Respostas

  • Bom dia, EricJhon92

    Tudo bem?

    Obrigado por usar o fórum MSDN.

    Dá uma olhada nesse link, ele ensina a fazer o que você está pedindo.

    https://blogs.msdn.microsoft.com/tolong/2007/11/15/read-write-xml-in-memory-stream/

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Sugerido como Resposta SammuelMiranda terça-feira, 27 de junho de 2017 11:23
    segunda-feira, 26 de junho de 2017 12:31
    Moderador
  • Bom dia, EricJhon92

    Tudo bem?

    Obrigado por usar o fórum MSDN.

    Dá uma olhada nesse link, ele ensina a fazer o que você está pedindo.

    https://blogs.msdn.microsoft.com/tolong/2007/11/15/read-write-xml-in-memory-stream/

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Obrigado por responder!

    O métodos do link a cima só funciona se eu extrair o arquivo xml do arquivo zip em uma pasta e carrega-lo em um MemoryStream, o que seria mais vantajoso carregar o arquivo xml através do seu caminho. :-/

    terça-feira, 27 de junho de 2017 19:57
  • Boa tarde, EricJhon92.

    E isso não atende o que você está precisando?O que você realmente precisa?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 27 de junho de 2017 20:25
    Moderador
  • Boa tarde, EricJhon92.

    E isso não atende o que você está precisando?O que você realmente precisa?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    Infelizmente não resolveu, pois é justamente o que estou fazendo no código acima. Acredito que o problema esteja na forma como estou extraindo o arquivo xml do arquivo zip, pois a extração do arquivo xml em uma variável do tipo MemoryStream ocorre sem erros, mas quando passo a variável (carregada com o xml) através do XmlDocument.Load(MyMemoryStream) ocorre um erro informando que o elemento raiz é inexistente. :-/
    quinta-feira, 29 de junho de 2017 01:50
  • Caro, EricJhon92.

    Tudo bem? 

    Pode postar a imagem do erro para que possamos te ajudar?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 29 de junho de 2017 12:26
    Moderador
  • Bom dia  EricJhon92,

    Estive testando e validei esse código

    ‘open file from the disk (file path is the path to the file to be opened)
    Using fileStream As FileStream = File.OpenRead(filePath)
    ‘create new MemoryStream object
    Dim memStream As New MemoryStream()
    memStream.SetLength(fileStream.Length)
    ‘read file to MemoryStream
    fileStream.Read(memStream.GetBuffer(), 0, CInt(Fix(fileStream.Length)))
    End Using
    

    Referência: Read File from Disk into MemoryStream using C# or VB.NET




    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 29 de junho de 2017 14:08
  • Bom dia  EricJhon92,

    Estive testando e validei esse código

    ‘open file from the disk (file path is the path to the file to be opened)
    Using fileStream As FileStream = File.OpenRead(filePath)
    ‘create new MemoryStream object
    Dim memStream As New MemoryStream()
    memStream.SetLength(fileStream.Length)
    ‘read file to MemoryStream
    fileStream.Read(memStream.GetBuffer(), 0, CInt(Fix(fileStream.Length)))
    End Using

    Referência: Read File from Disk into MemoryStream using C# or VB.NET




    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    Infelizmente esse código não serve, uma vez que o arquivo esta armazenado em arquivo zip e o que eu quero é extrair o arquivo de dentro do zip diretamente para um MemoryStream, sem escreve-lo no disco.
    quinta-feira, 29 de junho de 2017 18:31
  • Caro, EricJhon92.

    Tudo bem? 

    Pode postar a imagem do erro para que possamos te ajudar?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Dim oXML As New XmlDocument()
    Dim ms As New MemoryStream
    
    Using zip As ZipFile = ZipFile.Read(CaminhoArquivo)
        Dim Arquivo As ZipEntry
        For Each Arquivo In zip
            Arquivo.Extract(ms)
        Next
    End Using
    
    oXML.Load(ms)

    Na última linda desse código ele mostra a seguinte mensagem: "Elemento raiz inexistente."

    quinta-feira, 29 de junho de 2017 18:33
  • Boa tarde, EricJhon92

    Quando ele está trazendo essa mensagem de erro, ele geralmente traz um código junto, qual o código que está aparecendo no teu?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 30 de junho de 2017 17:26
    Moderador
  • Boa tarde, EricJhon92

    Quando ele está trazendo essa mensagem de erro, ele geralmente traz um código junto, qual o código que está aparecendo no teu?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Não aparece código:

    terça-feira, 4 de julho de 2017 23:15
  • Converta o teu ms pra uma String em UTF-8, aí você pode investigar melhor.
    quarta-feira, 5 de julho de 2017 02:38
  • Converta o teu ms pra uma String em UTF-8, aí você pode investigar melhor.

    Não deu certo.
    quarta-feira, 2 de agosto de 2017 19:37
  • Pessoal, as imagens acima são a interface da minha aplicação e os arquivos da mesma (*.rpl) respectivamente. Como vocês podem ver trata-se de um aplicado que, basicamente, gerencia imagens em camadas e grava essas informações em um arquivo xml compactado. O que eu gostaria era de poder abrir esse arquivo rpl (*.zip) e carregar o arquivo rpl.xml na memória afim de poder lê-lo e carregar as informações das Pranchas (informações de render, legenda e camadas, que são imagens de alta resolução decodificadas de base64 gravadas no arquivo conforme imagem acima).

    Porém, estou com um grande problema. Atualmente eu estou extraindo o arquivo rpl.xml em uma pasta temporária e lendo o mesmo no programa (carregando todas as informações na memória), mas isso está me deixando sem memória e causando muita lentidão no programa devido as imagens de alta resolução que estão carregas nos picturebox da seção "camadas".

    Eu gostaria que alguém me desse uma luz quanto a estrutura dos arquivos RPLs. Qual a melhor forma de estrutura-lo, grava-lo em disco (se compactado ou não) e le-lo (se carregar o xml na memória e converter as strings base64 das imagens direto nos picturebox (como atualmente, o que ocasiona lentidão), se escrever as imagens no disco e passar o caminho nos pictureboxs, ou outro método qualquer.)

    quarta-feira, 2 de agosto de 2017 20:01
  • Converta o teu ms pra uma String em UTF-8, aí você pode investigar melhor.


    Não deu certo.

    Sugeri isto para você pode ver o conteúdo que estava tentando carregar.
    Na verdade, era apenas pra certificar se de fato não havia a declaração xml, como mostra a mensagem da exceção.

    Pra instanciar um objeto XmlDocument, o conteúdo deve iniciar com a declaração:

    <?xml version="1.0" encoding="UTF-8" ?>

    O valor do atributo encoding pode ser qualquer um que você deseje usar.

    ATT
    sexta-feira, 4 de agosto de 2017 02:04
  • Consegui resolver o problema da seguinte maneira:

    Dim oXML As New XmlDocument()
    Dim ms As New MemoryStream()
    
    Using zip As ZipFile = ZipFile.Read(NomeArquivo)
            Dim Arquivo As ZipEntry
            For Each Arquivo In zip
                    Arquivo.Extract(ms)
            Next
    End Using
    
    'carrega o arquivo XML
    Dim r As String = Text.Encoding.UTF8.GetString(ms.ToArray())
    
    oXML.LoadXml(r)

    • Marcado como Resposta EricJhon92 sexta-feira, 8 de setembro de 2017 17:10
    sexta-feira, 8 de setembro de 2017 17:10