Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wBB

Leitura de XML com erro

Recommended Posts

Pessoal,

Gostaria de saber como pré-validar um arquivo XML antes acessar seu conteúdo. Preciso disso pois tenho um script que fica lendo um XML de uma determinada pasta que constantemente está sendo atualizada com um novo XML (o esquema do XML é sempre o mesmo, mas muda o conteúdo, claro). Só que vez ou outra uma das atualizações do XML salvo nessa pasta, vem um arquivo corrompido e aí me ferra o que vem para frente.

 

Queria saber se tem abrir o arquivo, validar e só então utilizá-lo efetivamente (ou outra solução qualquer...).

Compartilhar este post


Link para o post
Compartilhar em outros sites

usando do DOM com ASP você abre o arquivo na página ASP, mais o que você fala de validação??? É saber se suas TAGS existem? sem for isso olha esse comparador de tags que crie com XML + ASP, ele verifica se a tag existe, você pode colocar todas as tags para verificar.

http://tedk.com.br/blog/index.php/2008/07/...ag-xml-com-asp/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Considerando o código abaixo, quando é executa o "Load" o script trava por alguns segundos se o XML a ser carregado estiver corrompido. Eu queria saber se existe uma maneira de contornar este travamento, verificando antes do "Load" se o XML é OK.

 

set XMLdoc = CreateObject("Microsoft.XMLDOM")

XMLdoc.async = False

XMLdoc.load("NomeDoXML.xml")

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, como disse, se as tags forem fixas você pode fazer o objeto XML:

 

If objLista.item(i).nodeName = "NOME_TAG" Then

se ela existir, você faz outras comparações de tags até quando ele não achar ou achar, caso ele ache você conclui os IF, caso contrário você diz, "arquivo corrompido", o ASP não vai adivinhar assim que o arquivo está corrompido de primeira, tem que faz as verificações das tags.

 

e esses ifs você colocar antes do primeiro load assim:

 

set XMLdoc = CreateObject("Microsoft.XMLDOM")

XMLdoc.async = False

XMLdoc.load("NomeDoXML.xml")

 

If objLista.item(i).nodeName = "NOME_TAG" Then

.....

 

.. quando acabar os ifs e ele estiver correto, faz o load novamente mais com outro setamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ted k.

Acho que você não deve ter passado por um problema parecido ainda... estou dizendo isso, pois quando você acessa um arquivo XML corrompido não dá para sair lendo seu conteúdo. É justamente esse meu problema. Se desse para sair executando "IF <tag> then", seria ótimo....

 

obrigado mesmo assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte... antes de buscar o conteúdo dele, faz uma breve leitura verificando se tem inicio e fim (usando FSO). Se estiver ok vai para a leitura do conteúdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era só pesquisar aqui no Fórum... mas vai um exemplo:

<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set texto = fso.OpenTextFile(Server.Mappath("NomeDoXML.xml") & "",1,false,0)

while (not texto.AtEndOfStream)
	 linha = texto.ReadLine

	 response.write linha
wend

Set texto = Nothing
Set fso = Nothing
%>

O que ele faz é ler linha por linha do arquivo. Agora usando ou não funções do ASP, você faz as comparações para saber se chegou no final do arquivo corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hargon.

FSO não é um componente nativo do ISS? se sim, usando Apache vai funcionar?

 

Testei em minha aplicação, mas não pode ser aplicado pois meus arquivos XML são muito grandes e sofrem acesso constantemente em um curto espaço de tempo, o que inviabiliza a leitura linha-a-linha.

 

Obrigado pela dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aí é um problema hein. No Apache não sei se há algo equivalente.

 

Mas uma coisa é certa, você não vai conseguir saber se o arquivo é válido ou não se você não ler ele.

 

Dê uma pesquisar sobre "fso" + "arquivo texto", talvez você encontre algum comando que leia a primeira e a última linha do arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.