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

(Resolvido) Microsoft.XMLDOM não funciona


D'j Diego Silva

Pergunta

O meu problema é o seguinte: estou criando um site e na página inicial contém um iframe que acessa uma página em asp com o seguinte código:

<%
var objXML = Server.CreateObject("Microsoft.XMLDOM");
objXML.async = false;
objXML.load("http://www.estadao.com.br/rss/manchetes.xml");

Response.Write(objXML);
%>

Só que a variavel objXML não retorna nada. Já olhei no código fonte e nada de tags xml.

Testei isso no lado cliente (trocando as tags <% e %> por &lt;script> e </script>, respectivamente, e trocando Response.Write por document.write) e funcionou. Mas na hora de executar isso no lado servidor, não retorna nada.

Informações: meu IE é 7.0, a versão do IIS é 5.1 (winxp), não usei outro computador para testar (mas creio que vai ser a mesma coisa: não vai retornar nada). O problema é que quando uso esse código no lado cliente, aparece a seguinte mensagem: "Esta página está acessando informações que estão fora de seu controle. Isso é potencialmente arriscado sob o ponto de vista de segurança. Deseja continuar?". Isso só aparece quando digito o endereço do no-ip (pois estou usando no-ip), quando digito localhost, não pede nada e aparece.

Qual a solução para isso? Há algum erro com o código ou há erro com as configurações?

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Você provavelmente não está com a visualização de erros habilitada no IIS.

O ASP não é uma linguagem de programação, e sim um framework. Portanto, é possível utilizar diversas linguagens, tais como: VBScript (padrão), JScript e até PHP. A sintaxe da linguagem VBScript não inclui o "var", que é aceito em JScript. ALém disso, também não devem existir ponto-e-vírgula no fim de uma instrução.

Se realmente estiver utilizando ASP VBScript, tente deixar seu código assim:

<%
objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = false
objXML.load("http://www.estadao.com.br/rss/manchetes.xml")

Response.Write(objXML)
%>

Link para o comentário
Compartilhar em outros sites

  • 0
Como está utilizando ASP JScript não há erros (ao menos não percebi nenhum) na sintaxe.

Verifique se o IIS está configurado para mostrar os erros.

Verdade. Na sintaxe não há erro algum, mas no retorno da variável objXML, parece que o documento xml não tem nada dentro do conteúdo. Parece vazio, pois não retorna nada. Você testou ele?

E como que vê se o iis está configurado para mostrar erros?

Link para o comentário
Compartilhar em outros sites

  • 0

Achei um outro activex que funciona:

<%
var http = new ActiveXObject("Microsoft.XMLHTTP");
http.open("GET", "http://www.estadao.com.br/rss/manchetes.xml", false);
http.send(null);
var xmlDocument = http.responseText;
Response.Write(xmlDocument);
%>
Como agora faço para manipular as tags? Pois eu quero pegar apenas a tag "item" com esse código:
xmlRaiz = xmlDocument.getElementsByTagName("item");
E quando tento essa linha dá esse erro: "Erro em tempo de execução do Microsoft JScript erro '800a01b6' O objeto não dá suporte para a propriedade ou método" Usei o código:
var xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
xmlDocument.loadXML(xmlDocumento);

Mas não retorna nada. Enfim, que código pode manipular as tags em asp jscript?

Link para o comentário
Compartilhar em outros sites

  • 0

Achei a solução!

Aqui vai o código para quem tiver a mesma dúvida:

<%

//antes vão alguns códigos de randomização

var http = new ActiveXObject("Microsoft.XMLHTTP"); //cria o activex de obtenção do arquivo xml
http.open("GET", contat, false); //onde contat é o endereço (url) do xml
http.SetRequestHeader("Content-type", "text/xml"); //define o cabeçalho
http.send(null); //envia request
var xmlDocumento = http.responseXML.xml; //resposta do servidor


xmlRss = new ActiveXObject("Microsoft.XMLDOM"); //cria o activex de manipulação das nodes
xmlRss.async = false; //define que não é para processar o arquivo em segundo plano
xmlRss.loadXML(xmlDocumento); //entrega parte do documento xml para o activex processar

xmlRaiz = xmlRss.documentElement.getElementsByTagName("item"); //enumera todas as tags "item"
arrnot = new Array(); //novo array
lin = new Array(); //novo array dos links

    for(i=0;i<xmlRaiz.length;i++){
    p=1; //define qual é o nó filho do item que contém o link        
    arrnot[i]=xmlRaiz.item(i).childNodes.item(0).text; //título da notícia
    lin[i]=xmlRaiz.item(i).childNodes.item(p).text; //link
    }

randomizadoi=Number(aleatorio(xmlRaiz.length)+""); //randomiza a notícia, pois esse "sistema de notícias" obtém todas as notícias e escolhe uma de cada vez.
t=("<a href='"+lin[randomizadoi]+"'>"+arrnot[randomizadoi] + "</a> <span style='color: #888;'>"+fonte+"</span>"); //monta a string que vai aparecer no cliente
xmlRss = "" //apaga o rastro do activex
Response.Write(t) //envia o conteúdo ao cliente
%>

O que eu estava esquecendo era de obter o arquivo por um activex e processá-lo por outro, e esqueci também do "documentElement".

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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