Ir para conteúdo

Arquivado

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

mruoppolo

Leitura de XML com JS

Recommended Posts

Olá, tudo bem?

 

Estou com uma dúvida que é relativamente simples, porém eu nunca fiz este tipo de coisa então estou com dificuldade. Eu preciso ler um XML que é enviado para o meu script através de uma URL e os dados dele mudam a cada 2 minutos (em média), no caso eu pensei em fazer utilizando Ajax assim posso puxar o XML sem recarregar a página do usuário (a origem do XML é um subdominio do site que roda o script).

 

Encontrei durante minhas pesquisas na internet uma solução: esta aqui funcionou legal, porém é para um XML simples o meu tem diversos "nodes" então não sei como adaptar.

 

Este aqui é o XML que é mostrado no exemplo:

 

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> 
 <valor>
   valor do xml
</valor>

 

O XML que eu preciso ler é este aqui:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> 
 <Pulsar>
  <OnAir>
     <song>
        <singer>GUSTTAVO LIMA</singer> 
        <song>APELIDO CARINHOSO</song> 
     </song>
   <OnAir>
 </Pulsar>

O código JS que lê é este aqui:

var http_request;
var obj;
var tpBrowser;

if(window.XMLHttpRequest) {
	tpBrowser = 'ns';
	http_request = new XMLHttpRequest();

	if(http_request.overrideMimeType)
		http_request.overrideMimeType('text/xml');
}

else if (window.ActiveXObject) {
	tpBrowser = 'ie';
	try { http_request = new ActiveXObject("Msxm12.XMLHTTP");}
	catch (e) {
		try {http_request = new ActiveXObject("Microsoft.XMLHTTP");}
		catch (e) {}
	}
}

function obterRequisicao(pagina, elemento) {
	obj = document.getElementById(elemento);

	if(http_request==null) {
		alert('Não foi possivel instanciar XMLHTTPRequest');
		return false;
	}

	http_request.onreadystatechange = mostrarConteudo;
	http_request.open('GET', pagina, true);
	http_request.send(null);
}

function mostrarConteudo() {
	if(http_request.readyState == 4) {
		var xmldoc = http_request.responseXML;
		var no = xmldoc.getElementsByTagName('pulsar').item(0);
		var valor = no.firstChild.data;

		if (tpBrowser=='ns') obj.textContent = valor;
		else if (tpBrowser=='ie') obj.innerText = valor;
	}

	else alert('falha ao fazer a requisição de dados');
}

E printa no meu HTML

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script language="javascript" src="meuscript.js"></script>
</head>
<body>
	<span style="cursor: pointer; text-decoration: underline;" onclick="obterRequisicao('metro.xml','resultado');">Clique aqui para ler o arquivo xml</span>
	<br><br>
	Resultado:
	<div id="resultado"></div>
</body>
</html>

Esta funcionando perfeito, só não consigo ler o meu porque ele tem diversos nodes, não sei bem como fazer.

 

Você poderia me ajudar??

 

Valeu :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesma coisa, você tem que ir navegando com as funções  getElementsByTagName e por ai em diante
lembre-se que é case-sensitive. Pulsar é diferente de pulsar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por juniormatrix
      Olá
       
      Achei esse script aqui no fórum mesmo:
       
      $.validator.addMethod( "customEmail", function (value, element) { return this.optional(element) || /^[\w-\.]+@fulano\.com\.br$/i.test(value); }, "Por favor, insira um e-mail válido com o domínio @fulano.com.br" ); $("#formulario").validate({ ignore: ".ignore", rules: { empresa: { required: true }, nome: { required: true }, contato: { required: true }, celular: { required: true }, email: { required: true, email: true, customEmail: true }, }, }); Testei e funcionou perfeitamente, mas gostaria que liberasse mais e-mails válidos, ao invés de apenas um.

      Tem como fazer? 
       
      Se alguém puder ajudar, fico muito grato.
    • Por Jack Oliveira
      Boa noite galera..
       
      Estou tentando gerar um sitemap com php
       
      So que tenho que por o limit 1200 
       
      mais que isso ele nao gera e se deixar sem limit 
       
      Obs: o banco de dados contem mais de 10 mil registros
      <?php // Data e hora atual $datetime = new DateTime(date('Y-m-d H:i:s')); // A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00 $date = $datetime->format(DateTime::ATOM); // ISO8601 // Gera o arquivo XML do sitemap $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>'.ConfigPainel('site_url').'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; $Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC"); if (is_array($Query)) { foreach ($Query as $modcid) { $xml .=' <url> <loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; //$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC"); $QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200"); if (is_array($QueryR)) { foreach ($QueryR as $v) { $Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0]; if(empty($v['slug'])) { }else{ $urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/'; $xml .=' <!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' --> <url> <loc>'.$urlseo.'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>0.85</priority> </url> <!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> '; } }} }} $xml .= ' </urlset>'; // Abre o arquivo ou tenta cria-lo se ele não exixtir $arquivo = fopen('../sitemap.xml', 'w'); if (fwrite($arquivo, $xml)) { Redireciona('./index.php?sucesso'); } else { Redireciona('?erro'); } fclose($arquivo); // Compactar arquivo sitemap para GZIP $data = implode("", file("sitemap.xml")); $gzdata = gzencode($data, 9); $fp = fopen("sitemap.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp); // Envia para o Google o novo sitemap gerado $urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url').""; // Arquivos a serem enviados $Files = ['sitemap.xml', 'sitemap.xml.gz']; // Envia os dois arquivos sitemap gerados para a URL do Google foreach ($Files as $file) { $url = $urlSitemap . $file; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } ?> Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...
    • Por Alessandro Bodão
      Salve galerinha, passando pra mostrar pra vocês o novo projeto de marca que a Jatobá Estúdio desenvolveu, espero que gostem.   https://www.behance.net/gallery/166555627/Fernanda-Pinheiro-Nutricionista-Esportiva
    • Por rogerblower
      Boas pessoal, estou precisando de um calendário para agenda com crud para agendamento, mas teria que ser free.
      Obrogado.
×

Informação importante

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