Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Programación General (http://www.forosdelweb.com/f14/)
-   -   no reconoce propiedad documentElement (http://www.forosdelweb.com/f14/no-reconoce-propiedad-documentelement-444931/)

yesik 21/11/2006 05:02

no reconoce propiedad documentElement
 
Hola tengo un xml así
Código HTML:

                $stringxml = '';
                $stringxml .= '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
                $stringxml .= '<?xml-stylesheet type="text/xsl" href="copy.xsl"?>';
                $stringxml .= '<dxml>';

                                                                for($i=0; $i < count($encontrados_casa); $i++)
                                                                        {
        $stringxml .= '  <casa>';
                $stringxml .= '    <provincia>'.$encontrados_casa[$i]['Provincia'].'</provincia>';
                $stringxml .= '    <poblacion>'.$encontrados_casa[$i]['Localidad'].'</poblacion>';
                $stringxml .= '    <coorx>'.$encontrados_casa[$i]['COORX'].'</coorx>';
                $stringxml .= '    <cory>'.$encontrados_casa[$i]['COORY'].'</coory>';
                $stringxml .= '  </casa>';

que recibo perfectamente incluso muestro en un alert y esta correcto, el problema esta al intentar acceder a sus elementos, lo estoy intentando asì
Código HTML:

                        var markers = xml.documentElement.getElementsByTagName("casa");
                        alert(markers.length);

pero no lo consigo
saben pq? tengo otra alternativa?

tunait 21/11/2006 05:19

Buenas :-)

prueba a acceder directamente sin usar documentElement pues seguramente estará incluido dentro del objeto xml

var markers = xml.getElementsByTagName("casa");
alert(markers.length);

un saludo :cool:

yesik 21/11/2006 05:25

pues ya lo habia probado pero nada, no consigo acceder al xml, no se si estará ahi como xml la variable q llega aunq creo q si pq con un alert me lo muestra...
Gracias de todas frmas....

tunait 21/11/2006 05:28

¿Cómo estás creando al objeto xml?

yesik 21/11/2006 05:32

bueno lo creo como explike en el 1º postbal principio y la llamada a esa pagina seria así:
<script language="javascript">
loadbusqueda(param,'<?php require_once("crearxml.php")?>');
</script>

aunq ya lo he probado de otra forma lo tengo en una página aparte para aislar pero nana... gracias d nuevo

tunait 21/11/2006 05:37

Y qué hay en loadbusqueda() ??

yesik 21/11/2006 05:42

pues sería esto.. son funciones de googlemaps, todo funciona hasta q intento leer el xml

function loadbusqueda(address,xml) {
alert(address); //recibe ok
alert(xml); //recibe ok
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.addControl(new GOverviewMapControl());
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
geocoder = new GClientGeocoder();
if (geocoder) {
geocoder.getLatLng(address,function(point) { map.setCenter(point, 13);});
}

var markers = xml.getElementsByTagName("casa");
alert(markers.length);

}// si es compatible
}//fin funcion

tunait 21/11/2006 07:03

Bueno, esa función usa otras funciones de google y si no las tienes todas te tirará errores.

Hay formas más sencillas para crear un objeto xml con javascript. w3schools propone un código sencillo crossbrowser http://www.w3schools.com/xml/xml_parser.asp el asunto es que es para cargar el xml de un archivo externo y por lo que veo estás cargando el xml como texto enviándolo directamente en el argumento de la función.

Aquí encontré un código crossbrowser para cargar el xml desde string, mira si te sirve

http://developer.mozilla.org/en/docs...rer_to_Mozilla


Adaptándolo a lo que quieres quedaría algo así

Código:

var myDocument;
xmlString = '<? require_once("crearxml.php"); ?>'


  if (document.implementation.createDocument){
    // Mozilla, create a new DOMParser
    var parser = new DOMParser();
    myDocument = parser.parseFromString(xmlString, "text/xml");
  } else if (window.ActiveXObject){
    // Internet Explorer, create a new XML document using ActiveX
    // and use loadXML as a DOM parser.
    myDocument = new ActiveXObject("Microsoft.XMLDOM");
    myDocument.async="false";

    myDocument.loadXML(xmlString);
  }
  var markers = myDocument.getElementsByTagName("casa");
alert(markers.length);

Mira a ver si así te sirve :arriba:

un saludo :cool:

yesik 21/11/2006 09:31

hola de nuevo ,y gracias por tu amabilidad lo he probado todo con este XML y aun no he conseguido leer de el, lo he probado tal como me has dicho pero no se pq makers tiene valor 0 aunque el xmlesta ahí....
intentare probar ahora con AJAX creando el xml aunque con pocas esperanzas... dices q lo puedo hacer más sencillo cargando directamente el xml pero no se como...

Gracias y un saludo

tunait 21/11/2006 10:47

Ah, qué despiste, se me olvidó comentarte algo que ví en el código php que genera el xml ... si lo pruebas como xml da error de parseo xml, por eso no te devuelve nada.

fíjate

Código:

$stringxml = '';
                $stringxml .= '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
                $stringxml .= '<?xml-stylesheet type="text/xsl" href="copy.xsl"?>';
                $stringxml .= '<dxml>';

                                                                for($i=0; $i < count($encontrados_casa); $i++)
                                                                        {
        $stringxml .= '  <casa>';
                $stringxml .= '    <provincia>'.$encontrados_casa[$i]['Provincia'].'</provincia>';
                $stringxml .= '    <poblacion>'.$encontrados_casa[$i]['Localidad'].'</poblacion>';
                $stringxml .= '    <coorx>'.$encontrados_casa[$i]['COORX'].'</coorx>';
                $stringxml .= '    <cory>'.$encontrados_casa[$i]['COORY'].'</coory>';
                $stringxml .= '  </casa>';

Se omitó una o en el tag de apertura de coory, de forma que se abre cory y se cierra coory, así que no queda un documento bien formado. Cambia eso y me cuentas :arriba:

un saludo :cool:

yesik 21/11/2006 16:39

muchiiiiisimas gracias tunait, de verdad menudo error de pardillo, como todos los míos jaja,
estoy empezadoc con esto de XML, y hay muchas cosas q no ntiendo , x ejemplo este q he hecho se supone bien formado no?
pero.... con esta estructura no funciona algo así::

var markers = myDocument.getElementsByTagName("casa");
markers[i].getAttribute("provincia");

ó se debe acceder de otra fora o quizas crear el xml de otra forma asi...

<casa provincia="valorprovincia" localidad="valor" />

Gracias de nuevo por todo, de verdad

tunait 22/11/2006 04:44

Efectivamente. Cuando usas getAttribute se busca un atributo en el elemento y no a uno de sus nodos hijo.

getAttribute("provincia") buscará si tiene ese atributo el elemento casa

<casa provincia="la provincia">

El problema de definir así todos los valores de lo que pueda tener una casa es que pueden haber valores demasiado largos, por ejemplo si le quieres poner una descripción.

Usa el DOM para acceder a esos elementos y busca el valor de los nodos de texto que contienen.

Si en markers guardas un elemento casa concreto puedes acceder a los elementos x contenidos en ese elemento casa de la misma forma que referenciaste a casa y al haber uno sólo de cada en cada elemento casa podrás acceder a él usando la posición 0

markers[0].getElementsByTagName('provincia')[0] apunta al elemento provincia del elemento casa con el que estés trabajando.

Para saber lo que contiene su nodo de texto accedes a él mediante firstChild.nodeValue

Prueba a pedirle una alerta de
Código:

markers[0].getElementsByTagName('provincia')[0].firstChild.nodeValue
Un saludo :cool:

yesik 22/11/2006 05:12

muchas gracias de nuevo iba a postear para decirte q ya habia encontrado la soluccion pero te me has adelantado,,
ahora me keda pelear con googlemaps

....un saludo...

tunait 22/11/2006 05:39

Estupendo :arriba: y suerte en tu pelea con googlemaps :cool:


La zona horaria es GMT -6. Ahora son las 20:54.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.