Usuário com melhor resposta
Como ler arquivo XML carregado em um MemoryStream?

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?
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
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/
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
-
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/
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. :-/
-
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.
-
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. :-/ -
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.
-
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. -
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. -
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."
-
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.
-
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:
-
-
-
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.)
-
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 -
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