How to fetch an element in XML using JavaScript

1

I want to do a search for a given element (in the name case) in a XML document, using only a input of type text.

Code of what I've already achieved

TagXML = function() {

  dados = "<doc>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Maria Adriana</nome>"
  dados = dados + "<telefone>(11) 5555-1234</telefone>"
  dados = dados + "<idade>2</idade>"
  dados = dados + "</clientes>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Giovana Pereira</nome>"
  dados = dados + "<telefone>(11) 5555-6789</telefone>"
  dados = dados + "<idade>25</idade>"
  dados = dados + "</clientes>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Ricardo Ramos</nome>"
  dados = dados + "<telefone>(11) 5555-6090</telefone>"
  dados = dados + "<idade>26</idade>"
  dados = dados + "</clientes>"
  dados = dados + "</doc>"

  // Executa uma consulta XML e armazena em busca
  var busca = document.getElementById('campo').value;

  if (window.DOMParser) { // Demais Navegadores
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(dados, "text/xml")
  } else { // Internet Explorer
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async = false;
    xmlDoc.loadXML(dados);
  }

  // Armazena na var registro o conteudo de uma tag "doc"
  registro = xmlDoc.getElementsByTagName("doc")[0];

  // Guarda na var nome o conteudo de uma tag "nome"
  nome = registro.getElementsByTagName("nome");

  // Laço dentro da tag "nome" para cada tag "nome" que encontrar
  for (var i in nome) {
    // Verificando se houve alguma busca com sucesso
    if (nome[i].firstChild.textContent == busca) {
      // Exibindo os resultados encontrados
      alert('existe sim');
      break;
    } else {
      alert('não existe');
      break;
    }
  }
}
<input type="text" value="" id="campo" />
<input type="button" value="Procurar" onclick="TagXML();" />

<pre>Ex.: Maria Adriana, Giovana Pereira ou Ricardo Ramos</pre>

The idea is to issue a alert() indicating whether the result exists or not.

For this I need to read the XML and make the selection according to the index [i] by going through each element of the tag "name".

What's happening

Problem-ThethreenamesexistwithinXML,butitonlyconfirmsthefirst,andoverridestherest.

Theloopthatshouldreturntheindexpositionnumberofeach"name" only returns the first index.

    
asked by anonymous 28.01.2017 / 18:07

1 answer

3

Your problem is in break .... change to continue and be happy

Code explained (with example) of the operation of break and continue in javascript here

TagXML = function() {

  dados = "<doc>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Maria Adriana</nome>"
  dados = dados + "<telefone>(11) 5555-1234</telefone>"
  dados = dados + "<idade>2</idade>"
  dados = dados + "</clientes>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Giovana Pereira</nome>"
  dados = dados + "<telefone>(11) 5555-6789</telefone>"
  dados = dados + "<idade>25</idade>"
  dados = dados + "</clientes>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Ricardo Ramos</nome>"
  dados = dados + "<telefone>(11) 5555-6090</telefone>"
  dados = dados + "<idade>26</idade>"
  dados = dados + "</clientes>"
  dados = dados + "</doc>"

  // Executa uma consulta XML e armazena em busca
  var busca = document.getElementById('campo').value;

  if (window.DOMParser) { // Demais Navegadores
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(dados, "text/xml")
  } else { // Internet Explorer
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async = false;
    xmlDoc.loadXML(dados);
  }

  // Armazena na var registro o conteudo de uma tag "doc"
  registro = xmlDoc.getElementsByTagName("doc")[0];

  // Guarda na var nome o conteudo de uma tag "nome"
  nome = registro.getElementsByTagName("nome");

  // Laço dentro da tag "nome" para cada tag "nome" que encontrar
  for (i = 0; i < nome.length; i++) {
    // Verificando se houve alguma busca com sucesso
    if (nome[i].firstChild.textContent == busca) {
      // Exibindo os resultados encontrados
      alert('existe sim');
      break;
    } else {
      alert('nao existe na posicao' + i);
      continue;
    }
  }
  
}
<input type="text" value="" id="campo" />
<input type="button" value="Procurar" onclick="TagXML();" />

<pre>Ex.: Maria Adriana, Giovana Pereira ou Ricardo Ramos</pre>

[obs] I would do it differently:

TagXML = function() {

  dados = "<doc>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Maria Adriana</nome>"
  dados = dados + "<telefone>(11) 5555-1234</telefone>"
  dados = dados + "<idade>2</idade>"
  dados = dados + "</clientes>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Giovana Pereira</nome>"
  dados = dados + "<telefone>(11) 5555-6789</telefone>"
  dados = dados + "<idade>25</idade>"
  dados = dados + "</clientes>"
  dados = dados + "<clientes>"
  dados = dados + "<nome>Ricardo Ramos</nome>"
  dados = dados + "<telefone>(11) 5555-6090</telefone>"
  dados = dados + "<idade>26</idade>"
  dados = dados + "</clientes>"
  dados = dados + "</doc>"

  // Executa uma consulta XML e armazena em busca
  var busca = document.getElementById('campo').value;

  if (window.DOMParser) { // Demais Navegadores
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(dados, "text/xml")
  } else { // Internet Explorer
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async = false;
    xmlDoc.loadXML(dados);
  }

  // Armazena na var registro o conteudo de uma tag "doc"
  registro = xmlDoc.getElementsByTagName("doc")[0];

  // Guarda na var nome o conteudo de uma tag "nome"
  nome = registro.getElementsByTagName("nome");

  // Laço dentro da tag "nome" para cada tag "nome" que encontrar
  for (i = 0; i < nome.length; i++) {
    // Verificando se houve alguma busca com sucesso
    if (nome[i].firstChild.textContent == busca) {
      // Exibindo os resultados encontrados
      var existe = 1;
      var linha = i;
      break;
    }
  }
  
  if(existe){ alert("existe sim!! na linha: "+ linha) }else{ alert("nao existe") }
}
<input type="text" value="" id="campo" />
<input type="button" value="Procurar" onclick="TagXML();" />

<pre>Ex.: Maria Adriana, Giovana Pereira ou Ricardo Ramos</pre>
    
01.02.2017 / 04:01