Ir para conteúdo
Fórum Script Brasil
  • 0

IE não lê arquivo xml, mas FF sim.


BRN Souza

Pergunta

Criei um arquivo ASP que lê um feed xml (no meu exemplo o do G1), e escreve exatamente o mesmo código XML lido na página.

O problema é que o XML escrito pelo ASP não consegue ser interpretado corretamente pelo Internet Explorer.

Ele acusa erro em um nó que contém uma palavra com ACENTO ("Notícias").

O problema é que se você pegar o código fonte do XML gerado e que o Internet Explorer acusa erro, copiar seu conteúdo, salvar em um arquivo XML e abrir no Internet Explorer ele lê.

Ou seja, o mesmo código quando gerado pelo ASP dá erro, mas se você copiar o código gerado, colar em um arquivo e abrir no IE, funciona.

Porque isso?

Links dos arquivos:

ASP gerando o XML (e dando erro): http://www.brninternet.com/testes/feedComErro.asp

Código colado na mão (funcionando): http://www.brninternet.com/testes/feedSemErro.asp

Segue abaixo o código da minha página ASP que gera o XML.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%Option Explicit%>
<%Response.ContentType="application/xml"%>
<%Response.Charset="ISO-8859-1"%>
<%
    function getStrXml(url)
        'Esta sub retorna a string do XML lido
        Dim objSrvHTTP, strXML, objXML, raiz, i, channel, itens
    
    
        'Instancia o objeto HttpRequest.
        Set objSrvHTTP = Server.CreateObject("MSXML2.XMLHTTP.3.0")
        
        'Informe o método e a URL a ser capturada
        objSrvHTTP.open "GET", url, false
        
        'Com o método setRequestHeader informamos o cabeçalho HTTP
        objSrvHTTP.setRequestHeader "Content-Type", "text/xml"

        'O método Send envia a solicitação HTTP e exibe o conteúdo da página
        objSrvHTTP.Send()
        
        'Amazenamos o resultado na variável strXML
        strXML = objSrvHTTP.ResponseXML.xml
        
        'Instancia o objeto XMLDOM
        Set objXML = Server.CreateObject("MSXML2.DOMDocument.4.0") 
        'Indicamos que o download em segundo plano não é permitido
        objXML.async = false

        'O método loadXML carrega parte do código, sem ter o documento XML
        objXML.loadXML(strXML)
        
        'Verifica possíveis erros com o método parseError
        if objXML.ParseError.errorCode <> 0 then
            response.write "Código do erro: " & objXML.parseError.errorCode & "<br>"
            response.write "Posição no arquivo: " & objXML.parseError.filepos & "<br>"
            response.write "Linha: " & objXML.parseError.line & "<br>"
            response.write "Posição na linha: " & objXML.parseError.linepos & "<br>"
            response.write "Descrição: " & objXML.parseError.reason & "<br>"
            response.write "Texto que causa o erro: " & objXML.parseError.srcText & "<br>"
            response.write "Url do arquivo com problemas: " & objXML.parseError.url
        end if
        
        'Destruíndo os objetos
        Set objXML = Nothing
        Set objSrvHTTP = Nothing

        getStrXml = strXML
    end function

    Response.Write(getStrXml("http://g1.globo.com/Rss2/0,,AS0-5597,00.xml"))
%>

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Cara... não faço ideia tb...

Mas assim... se fosse só por causa desse acento poderia ser resolvido com um replace ("acho")...

Acontece que se fosse pelo acento tb não funcionaria com o outro arquivo... que está acentuado!

Sei que o Bareta andou mexendo esses tempos com Feed... aguarde o posicionamento dele... eu por hora estou sem ideias... se me lembrar de alguma coisa posto aqui!

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Fui dar uma olhada no seu "FeedSemErro.asp" e ele transformou os acentos !

Por isso não dá erro

Olhe como está o código (só o início)

<rss version="2.0"> 
    <channel> 
        <title>G1 - O Portal de Notícias da Globo</title> 
        <link>http://g1.globo.com/Noticias/0,,5597,00.html</link> 
        <description>Acompanhe as últimas notícias de política, economia, ciência, saúde, cultura e mais, no Brasil e no Mundo de forma organizada e clara, com muitas fotos e vídeos. Conta com redações exclusivas em São Paulo, Rio de Janeiro e Brasília, além do Jornal Nacional, Jornal da Globo, Jornal Hoje, Bom Dia Brasil, Globonews e toda a equipe de jornalismo da Globo.</description> 
        <language>pt-BR</language> 
        <copyright>© Todos os direitos reservados.</copyright> 
        <image> 
            <title>G1 - O Portal de Notícias da Globo</title> 
            <url>http://g1.globo.com/Portal/globonoticias/img/tit_header_rss.jpg</url> 
            <link>http://g1.globo.com</link> 
            <width>144</width> 
            <height>60</height> 
        </image> 
        <item>
[...]
E agora o "FeedComErro.asp"
<rss version="2.0"> 
    <channel> 
        <title>G1 - O Portal de Notícias da Globo</title> 
        <link>http://g1.globo.com/Noticias/0,,5597,00.html</link> 
        <description>Acompanhe as últimas notícias de política, economia, ciência, saúde, cultura e mais, no Brasil e no Mundo de forma organizada e clara, com muitas fotos e vídeos. Conta com redações exclusivas em São Paulo, Rio de Janeiro e Brasília, além do Jornal Nacional, Jornal da Globo, Jornal Hoje, Bom Dia Brasil, Globonews e toda a equipe de jornalismo da Globo.</description> 
        <language>pt-BR</language> 
        <copyright>© Todos os direitos reservados.</copyright> 
        <image> 
            <title>G1 - O Portal de Notícias da Globo</title> 
            <url>http://g1.globo.com/Portal/globonoticias/img/tit_header_rss.jpg</url> 
            <link>http://g1.globo.com</link> 
            <width>144</width> 
            <height>60</height> 
        </image> 
        <item>
[...]

Tente dar um replace nos acentos, como o Rafael falou

Link para o comentário
Compartilhar em outros sites

  • 0

Estranho.....

Assim como pro Jonathan, pra mim os códigos são exatamente iguais nos dois arquivos.

Inclusive, pra escrever o arquivo "FeedSemErro.asp", eu abri o "FeedComErro.asp" no Firefox, copiei o código fonte do xml retornado, e colei na íntegra no "FeedSemErro.asp".

Os códigos são exatamente os mesmos.

O que eu acho que pode ser é o seguinte:

1        'Instancia o objeto XMLDOM
2        Set objXML = Server.CreateObject("MSXML2.DOMDocument.4.0")
3        'Indicamos que o download em segundo plano não é permitido
4        objXML.async = false
5
6        'O método loadXML carrega parte do código, sem ter o documento XML
7        objXML.loadXML(strXML)

Na linha 2 onde eu instancio o MSXML2.DOMDocument.4.0 na memória do servidor web, eu não informo o charset com o qual eu quero que isso aconteça.

Eu acho que a informação do charset e do codepage usados no cabeçalho do arquivo asp serverm somente para a saída do que será escrito no arquivo e enviado para o cliente, mas não vale para a instância do XML que coloco na memória com o MSXML2.DOMDocument.4.0 .

Eu procurei na net uma maneira de configurar o charset do MSXML2.DOMDocument.4.0 quando eu o instanciasse, mas não achei.

Por isso não pude testar essa teoria (que como teoria, não sei se estaria certa).

Pessoal, continuo aguardando uma luz, e valeu pela força até aqui.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...