getelementbyid no encuentra resultados -- javascript campo con html campo con xml campo con dom camp Relacionados El problema

getElementById doesn't find results


1
vote

problema

Español

Estoy tratando de analizar un archivo XML por el ID de todas las etiquetas. Aquí está mi XML

      <?xml version="1.0" encoding="UTF-8"?>     <zones>     <bedroom id="0">        <fan id="00">on</fan>        <tv id="01">off</tv>     </bedroom>     <hall id="1">     <tube id="10">on</tube>     <bulb id="11">off</bulb>     <fan id="12">on</fan>     <tv id="13">on</tv>     <ac id="14">on</ac>     </hall>     <kitchen id="2">     <freez id="20">on</freez>     </kitchen>     <toilet id="3">         <bulb id="30">on</bulb>     </toilet>     <bathroom id="4">         <heater id="40">on</heater>     </bathroom>    </zones>   

y aquí está mi código ..

       <html>      <head> <meta http-equiv="refresh" content="1" > </head>      <body>        <script type="text/javascript" for="window" event="onload">        if (window.XMLHttpRequest)        {// code for IE7+, Firefox, Chrome, Opera, Safari            xmlhttp=new XMLHttpRequest();        }         xmlhttp.open("GET","home.xml",false);         xmlhttp.send();         xmlDoc=xmlhttp.responseXML;           document.write("<table border='1'>");         var x=xmlDoc.getElementById("0");         for (i=0;i<x.length;i++)         {              document.write("<tr><td>");                 document.write("fan");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("fan")[0].childNodes[0].nodeValue);                document.write("<tr><td>");                document.write("tv");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("tv")[0].childNodes[0].nodeValue);                document.write("</td></tr>");        }         var x=xmlDoc.getElementsByTagName("hall");        for (i=0;i<x.length;i++)        {              document.write("<tr><td>");                 document.write("tube");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("tube")  [0].childNodes[0].nodeValue);                  document.write("<tr><td>");                 document.write("bulb");                 document.write("</td><td>");                 document.write(x[i].getElementsByTagName("bulb") [0].childNodes[0].nodeValue);                 document.write("<tr><td>");                document.write("fan");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("fan")[0].childNodes[0].nodeValue);                 document.write("<tr><td>");                document.write("tv");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("tv")[0].childNodes[0].nodeValue);                 document.write("<tr><td>");                document.write("ac");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("ac")[0].childNodes[0].nodeValue);                 document.write("</td></tr>");          }           var x=xmlDoc.getElementsByTagName("kitchen");          for (i=0;i<x.length;i++)          {              document.write("<tr><td>");                 document.write("freez");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("freez") [0].childNodes[0].nodeValue);          }           var x=xmlDoc.getElementsByTagName("toilet");          for (i=0;i<x.length;i++)          {              document.write("<tr><td>");                 document.write("bulb");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("bulb") [0].childNodes[0].nodeValue);          }           var x=xmlDoc.getElementsByTagName("bathroom");          for (i=0;i<x.length;i++)          {              document.write("<tr><td>");                 document.write("heater");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("heater") [0].childNodes[0].nodeValue);          }         document.write("</table>");  </script> </body> </html>   

El problema es que cuando implemento mi código con

  var x=xmlDoc.getElementByTagName("bedroom");   

Todo funciona bien. Pero cuando cambio eso a

  var x=xmlDoc.getElementById("0");    

Nada se muestra en el navegador. Así que por favor ayúdame a lo largo de eso, estoy atrapado en esto.

Original en ingles

I am trying to parse a xml file by the id of all the tags. Here is my xml

    <?xml version="1.0" encoding="UTF-8"?>     <zones>     <bedroom id="0">        <fan id="00">on</fan>        <tv id="01">off</tv>     </bedroom>     <hall id="1">     <tube id="10">on</tube>     <bulb id="11">off</bulb>     <fan id="12">on</fan>     <tv id="13">on</tv>     <ac id="14">on</ac>     </hall>     <kitchen id="2">     <freez id="20">on</freez>     </kitchen>     <toilet id="3">         <bulb id="30">on</bulb>     </toilet>     <bathroom id="4">         <heater id="40">on</heater>     </bathroom>    </zones> 

And here is my code..

     <html>      <head> <meta http-equiv="refresh" content="1" > </head>      <body>        <script type="text/javascript" for="window" event="onload">        if (window.XMLHttpRequest)        {// code for IE7+, Firefox, Chrome, Opera, Safari            xmlhttp=new XMLHttpRequest();        }         xmlhttp.open("GET","home.xml",false);         xmlhttp.send();         xmlDoc=xmlhttp.responseXML;           document.write("<table border='1'>");         var x=xmlDoc.getElementById("0");         for (i=0;i<x.length;i++)         {              document.write("<tr><td>");                 document.write("fan");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("fan")[0].childNodes[0].nodeValue);                document.write("<tr><td>");                document.write("tv");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("tv")[0].childNodes[0].nodeValue);                document.write("</td></tr>");        }         var x=xmlDoc.getElementsByTagName("hall");        for (i=0;i<x.length;i++)        {              document.write("<tr><td>");                 document.write("tube");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("tube")  [0].childNodes[0].nodeValue);                  document.write("<tr><td>");                 document.write("bulb");                 document.write("</td><td>");                 document.write(x[i].getElementsByTagName("bulb") [0].childNodes[0].nodeValue);                 document.write("<tr><td>");                document.write("fan");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("fan")[0].childNodes[0].nodeValue);                 document.write("<tr><td>");                document.write("tv");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("tv")[0].childNodes[0].nodeValue);                 document.write("<tr><td>");                document.write("ac");                document.write("</td><td>");                document.write(x[i].getElementsByTagName("ac")[0].childNodes[0].nodeValue);                 document.write("</td></tr>");          }           var x=xmlDoc.getElementsByTagName("kitchen");          for (i=0;i<x.length;i++)          {              document.write("<tr><td>");                 document.write("freez");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("freez") [0].childNodes[0].nodeValue);          }           var x=xmlDoc.getElementsByTagName("toilet");          for (i=0;i<x.length;i++)          {              document.write("<tr><td>");                 document.write("bulb");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("bulb") [0].childNodes[0].nodeValue);          }           var x=xmlDoc.getElementsByTagName("bathroom");          for (i=0;i<x.length;i++)          {              document.write("<tr><td>");                 document.write("heater");                 document.write("</td><td>");                  document.write(x[i].getElementsByTagName("heater") [0].childNodes[0].nodeValue);          }         document.write("</table>");  </script> </body> </html> 

the problem is that when i implement my code with

var x=xmlDoc.getElementByTagName("bedroom"); 

everything work fine. But when i change that to

var x=xmlDoc.getElementById("0");  

nothing is shown in the browser. So please help me over it, am stuck on this.

</div
           
         
         

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

GetElementByID devuelve un elemento que tiene un atributo que es de tipo "ID", no un atributo cuyo nombre es "ID". Sin un DTD para ir con su archivo XML, no tiene atributos con el tipo definido, por lo que GetElementByID siempre regresará NULL. http://reference.sitepoint.com/javascript/document/getelementbyid

w3schools hace un buen trabajo para explicar cómo usar un DTD. http://www.w3schools.com/dtd/default.asp

Sugeriría que si va por esta ruta, que considera que se considera el uso de un nombre más genérico para sus elementos XML y use un atributo para describir qué espacio o las aplicaciones que el elemento se refiere a (por ejemplo, en lugar de & lt; Dormitorio id = "0" & ​​gt; use & lt; zone room = "dormitorio" id = "0" & ​​gt; o en lugar de & lt; fan id = "00" & gt; use & lt name = "fan" id = "00" & gt; ) De lo contrario, su DTD será más grande y más difícil de mantener de lo que realmente necesita ser.

 

getElementById returns an element which has an attribute that is of type "ID", not an attribute whose name is "ID". Without a DTD to go with your XML file, you have no attributes with the defined type, so getElementById will always return null. http://reference.sitepoint.com/javascript/Document/getElementById

W3Schools does a pretty good job of explaining how to use a DTD. http://www.w3schools.com/dtd/default.asp

I would suggest that if you go this route that you consider using a more generic name for your XML elements and use an attribute to describe what room or applicance that element is referrring to (for example, instead of <bedroom id="0"> use <zone room="bedroom" id="0"> or instead of <fan id="00"> use <appliance name="fan" id="00">), otherwise your DTD will be larger and harder to maintain than it really needs to be.

</div
 
 
         
         
3
 
vote

Parece que tiene tres errores:


  1. en la línea 15, está usando:

      var x=xmlDoc.getElementsById("0");   

    debería ser:

      var x=xmlDoc.getElementById("0");   

    Si no ha visto la diferencia:

    Está utilizando getElementsById

    Cuando debe estar usando getElementById()

    Aquí está la documentación de MDN para getElementById()

  2. es el archivo en su computadora, o está en un servidor (incluidos los servidores domésticos (XAMPP, EASYPHP, etc.))

    XMLHttpRequest() solo funcionará si está en un servidor HTTP.

    Obtengo estos errores: errores

    Puede instalar uno de estos:

    • xampp
    • facephp
    • servidor apache

    Recomiendo usar XAMPP o EASPHP porque son mucho más fáciles de configurar.

    Luego, ponga sus archivos XML y HTML en su carpeta HTDOCS.

    Finalmente, vaya a su servidor y navegue a su archivo HTML.

    funciona en la mía:

    Salida en el archivo HTML:

    ¡Mira, funciona!

  3. Necesitará un DTD en el archivo para que funcione en algunos navegadores o puede cambiar su id6 Atributos a xml:id . Funcionará en la mayoría (tal vez todos) los navegadores modernos.


Actualizar: El OP ha cambiado el código de getElementsById() a getElementById() .

 

It looks like you have three errors:


  1. On line 15, you are using:

    var x=xmlDoc.getElementsById("0"); 

    It should be:

    var x=xmlDoc.getElementById("0"); 

    If you haven't spotted the difference:

    You are using getElementsById

    When you should be using getElementById()

    Here is MDN documentation for getElementById()

  2. Is the file on your computer, or is it on a server (including home servers (XAMPP, easyPHP etc.))

    XMLHttpRequest() will only work if it is on a HTTP server.

    I get these errors: errors

    You can install one of these:

    • XAMPP
    • easyPHP
    • Apache Server

    I recommend using XAMPP or easyPHP because they are a lot more easy to setup.

    Then put your XML and HTML files in your htdocs folder.

    Finally, go to your server and navigate to your HTML file.

    It works on mine:

    Output on the HTML file:

    Look, it works!

  3. You will need a DTD in the file to make it work in some browsers or you can change your id attributes to xml:id. It will work in most (maybe all) modern browsers.


UPDATE: The OP has changed the code from getElementsById() to getElementById().

</div
 
 
         
         
2
 
vote

por favor use getelementbyid

no getelementsbyid

 

Please use getElementById

Not getElementsById

</div
 
 
 
 
2
 
vote
  var x=xmlDoc.getElementById("0"); 0  

debería ser

  var x=xmlDoc.getElementById("0"); 111  

NO var x=xmlDoc.getElementById("0"); 2

 
var x=xmlDoc.getElementsById("0") 

It should be

var x=xmlDoc.getElementById("0") 

not getElementsbyId

</div
 
 
 
 
0
 
vote

var x=xmlDoc.getElementById("0"); 3

El carácter del alfabeto es muy importante

 

var x=xmlDoc.getElementById("0");

the Alphabet character is very important

</div
 
 

Relacionados problema

6  Mock manual React-Intl con jest para tener pruebas de instantáneas  ( Manual mock react intl with jest to have snapshot testing ) 
He estado luchando con la burla Biblioteca React-Intl con jest porque estoy teniendo este error cuando ejecuto las pruebas: Invariant Violation: [React...

1  Mantener el objeto como objeto después del filtrado  ( Keep object as object after filtering ) 
que es mi datoestructura const data = Immutable.fromJS({ 1: { foo: 'bar' ... }, 2: { foo: 'foo'...

0  Listas de menú HTML  ( Html menu lists ) 
todos, save: function() { var destination = this.get('content'); destination.save().then(function(){ var promises = Ember.A(); dest...

-4  Cómo prevenir la sobrescritura en el bucle  ( How to prevent overwriting in loop ) 
Steve y su familia fueron a 5 restaurantes diferentes. Las facturas fueron de $ 124, $ 48, $ 268, $ 180 y $ 42. A Steve le gusta consultar el 20% de la factur...

4  Convierte el formato de la fecha de Facebook a la fecha de JavaScript  ( Convert facebook date format to javascript date ) 
Hola, estoy recibiendo eventos de Facebook con FQL y JavaScript SDK. ¿Cómo puedo convertir la fecha del formato de Facebook en una fecha de JavaScript? gr...

0  Cómo cerrar automáticamente la ventana de inicio de sesión después de iniciar sesión en la página de inicio  ( How to automatically close the login window after logged into the homepage ) 
Función window.close() , funciona perfectamente para IE, pero no en Chrome y Firefox. En IE, la página de inicio de sesión se cerrará automáticamente, pero e...

141  React-router Scroll to Top en cada transición  ( React router scroll to top on every transition ) 
Tengo un problema al navegar en otra página, su posición seguirá siendo como la página antes. Por lo que no se desplaza hasta la parte superior automáticament...

0  ¿Hay alguna forma de deshabilitar la captura de pantalla en el sitio web en particular? La imagen no se puede guardar en ningún formato  ( Is there any way to disable the screenshot to the particular website image can ) 
Quiero crear un sitio web, desde allí, nadie puede robar mis fotos por captura de pantalla o cualquier tipo de método de descarga. Si intentan capturar la ima...

0  No puede leer la propiedad 'nombre' de indefinido en la ruta param  ( Cannot read property name of undefined in route param ) 
Siguiendo a lo largo de una Curso Expressjs en Tuts + Tengo lo siguiente ( Exacto de video ): var express = require('express'), app = express(); a...

0  Javascript agrega fragmento a un elemento HTML existente  ( Javascript append fragment to an existing html element ) 
He creado un fragmento DOM donde estoy agregando varios nodos infantiles en un bucle: fragment.appendChild( clone ) Quiero tomar este fragmento y usarl...

17  Angular2 destruye el componente actual completamente  ( Angular2 destroy current component completely ) 
Intenté buscar en Google y StackOverflow, pero no pudo encontrar una respuesta. Así que mi pregunta es simple "¿Cómo puedo eliminar el componente actual en An...

-2  ¿Cuál sería el valor predeterminado de las casillas de verificación y los controles de RadioButton? ¿Será nulo o booleano o cadena?  ( What would be the default value of checkbox and radiobutton controls will it b ) 
Estoy tratando de saber sobre los valores predeterminados de la casilla de verificación y el Radiobutton. ¿Será nulo o booleano o cadena? No pude poder encont...

2  Nginx proxying nodejs / express - 404 en archivos estáticos  ( Nginx proxying nodejs express 404 on static files ) 
Tengo una configuración con NGINX, que sirve a un sitio web de PHP de la raíz de / var / www y proxies nodejs / express en un subdirectorio en particular en m...

33  Google Analytics: ¿Cómo rastrear las páginas en una sola aplicación de página?  ( Google analytics how to track pages in a single page application ) 
Actualmente en mi sitio web , utilicé html5's pushState() Y popState En los enlaces para aumentar la velocidad. Sin embargo, esto realmente no cambia l...

1  Serie flotando para resaltar el color de la frontera  ( Series hover to highlight border color ) 
Tengo la siguiente implementación que en realidad resalta objetos emparejados en el gráfico de barras apiladas. Sin embargo, me gustaría saber si hay una ma...




© 2021 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos