0

我正在尝试通过 javascript 为 PhoneGap 应用程序从 xml 读取数据,我收到此错误“无法调用 null 的方法 'getElementsByTagName'”。我对较小的 xml 使用了完全相同的代码,并且它工作正常,现在我更改为更大的 xml 文件,它不再工作。这是我的代码和我的 xml。代码:

function cargar(nombre_lista){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}else{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","../../res/datahell.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var  lista_elementos = new Array();
fichas=xmlDoc.getElementsByTagName("ficha");     //LINE WHERE THE ERROR TRIGGERS
for (var i = 0; i <fichas.length ; i++) {
    tipo=(fichas[i].getElementsByTagName("tipo")[0].childNodes[0].nodeValue);
    subcategoria=(fichas[i].getElementsByTagName("subcategoria")[0].childNodes[0].nodeValue);

    if (tipo==window.localStorage.getItem("tipo") && subcategoria==window.localStorage.getItem("subcategoria")) {
        lista_elementos.push(fichas[i].getElementsByTagName("nombre")[0].childNodes[0].nodeValue)

    };
};

load_list(nombre_lista, lista_elementos);


}

XML:

<fichas>
<ficha>
    <tipo>comer</tipo>
    <subcategoria>restaurantes</subcategoria>
    <nombre>Restaurante Azurmendi</nombre>
    <coordenadas>
        <latitud>43.26055</latitud>
        <longitud>-2.813487</longitud>
    </coordenadas>
    <email>info@azurmendi.biz</email>
    <redessociales></redessociales>
    <telefonos>
        <telefono1>944558866</telefono1>
                    <telefono2></telefono2> 
    </telefonos>
<direccion>Legina auzoa, s/n, 48195 Larrabetzu
Corredor del Txorierri salida nº25</direccion>
    <web>www.azurmendi.biz</web>
    <horariodevisita></horariodevisita>
    <precio></precio>
<descripcion>Azurmendi gastronómico es un nuevo espacio creado y diseñado según la filosofía y los deseos de Eneko Atxa. Un restaurante con un espacio que busca la identidad y la diversidad. Un espacio vivo, vulnerable e interdependiente. Un ecosistema en el que el espacio, los humanos, los animales y los vegetales se complementan con el objetivo de según Eneko:
“ Dar placer a todo el que se adentre en él, un placer identitario que busca hacer de lo local algo universal ”.

</descripcion>
    <fotos>
        <foto1>../img/fotoX.jpg</foto1>
        <foto2>../img/fotoY.jpg</foto2>
        <foto3>../img/fotoZ.jpg</foto3>
    </fotos>
</ficha>
<ficha>
    <tipo>comer</tipo>
    <subcategoria>bodegas</subcategoria>
    <nombre>Bodega Magalarte</nombre>
    <coordenadas>
        <latitud>43.277768</latitud>
        <longitud>-2.830489</longitud>
    </coordenadas>
    <email>por confirmar</email>
    <redessociales></redessociales>
    <telefonos>
        <telefono1>617557680</telefono1>
                    <telefono2>636621455</telefono2> 
    </telefonos>
 <direccion></direccion>
    <web>www.magalartelezamatxakolina.com</web>
    <horariodevisita></horariodevisita>
 <precio>8 € (Visita guiada y cata)</precio>
    <descripcion>Descubre los secretos de la elaboración del txakoli, visitando nuestros viñedos y nuestra bodega familiar “Magalarte Lezama” fundada en el siglo XIX; posiblemente una de las pocas bodegas que se mantiene desde entonces.
Nuestro viñedo respeta el medio ambiente, cosechando bajo las normas de producción integrada, logrando un txakoli totalmente autóctono, tradicional y natural, inscrito en la Denominación de Origen de Bizkaiko Txakolina, certificado por Kalitatea y bajo las normas de calidad ISO 9001-2008.
Esta bodega situada en una zona privilegiada para el desarrollo de la vid y rodeado de naturaleza, a tan solo 10 minutos del aeropuerto y de Bilbao, os brinda la oportunidad de conocer los secretos del Valle del Txorierri.
No dejes escapar la oportunidad de degustar el aroma fresco y afrutado, el sabor y la textura diferenciados de nuestro producto.</descripcion>
    <fotos>
        <foto1>../img/Magalarte1.jpg</foto1>
        <foto2>../img/Magalarte2.jpg</foto2>
        <foto3>../img/Magalarte3.jpg</foto3>
    </fotos>
</ficha>
<ficha>
    <tipo>ver</tipo>
    <subcategoria>edificiosreligiosos</subcategoria>
    <nombre>Iglesia San Cristóbal</nombre>
    <coordenadas>
        <latitud>43.301743</latitud>
        <longitud>-2.877601</longitud>
    </coordenadas>
    <email></email>
    <redessociales></redessociales>
    <telefonos>
        <telefono1></telefono1>
                    <telefono2></telefono2> 
    </telefonos>
    <direccion></direccion>
    <web></web>
    <horariodevisita></horariodevisita>
    <precio></precio>
    <descripcion>Fundada en el siglo X y reedificada y ampliada en el año 1745. Es un edificio de mampuesto con grandes sillares en las esquinas. De acceso dintelado, torre rectangular y pórtico sostenido por vigas. En el interior se conserva una imagen gótica de la Virgen y el niño.</descripcion>
    <fotos>
        <foto1></foto1>
        <foto2></foto2>
        <foto3></foto3>
    </fotos>
</ficha>
<ficha>
    <tipo>ver</tipo>
    <subcategoria>edificiosreligiosos</subcategoria>
    <nombre>Iglesia San Isidro</nombre>
    <coordenadas>
        <latitud>43.299619</latitud>
        <longitud>-2.886271</longitud>
    </coordenadas>
    <email></email>
    <redessociales></redessociales>
    <telefonos>
        <telefono1>944541124</telefono1>
 <telefono2></telefono2> 
    </telefonos>
<direccion>Lainomendi Kalea, 2. 48160 Aldekona</direccion>
    <web></web>
    <horariodevisita></horariodevisita>
    <precio></precio>
    <descripcion>Edificio construido en 1958, de planta basilical y con torre lateralizada. Portada con tres arcos y acceso al edificio en medio punto.</descripcion>
    <fotos>
        <foto1></foto1>
        <foto2></foto2>
        <foto3></foto3>
    </fotos>
</ficha>
<ficha>
    <tipo>ver</tipo>
    <subcategoria>edificiosciviles</subcategoria>
    <nombre>Kultur birika</nombre>
    <coordenadas>
        <latitud>43,295699</latitud>
        <longitud>-2,883568</longitud>
    </coordenadas>
    <email>kulturbirika@kulturbirika.eu</email>
    <redessociales></redessociales>
    <telefonos>
        <telefono1>944659714</telefono1>
                    <telefono2></telefono2> 
    </telefonos>
<direccion>Anboto Plaza, 5 , 48160</direccion>
    <web>www.kulturbirika.eu</web>
    <horariodevisita></horariodevisita>
    <precio></precio>
<descripcion>Desde el Area de Cultura del Ayuntamiento de Derio queremos comunicar e informar de todas las materias y disciplinas culturales que se ofertan a la ciudadanía de Derio a lo largo de todo el año. Toda esta oferta cultural y de ocio se desarrolla en diferentes locales y escenarios, destacando: Larrabarri baserria, Gure Aretoa, Gazte y Kultur birika donde se ubica el Kzgunea, biblioteca, exposiciones, salas de música y danza, talleres y locales para las asociaciones.</descripcion>
    <fotos>
        <foto1>Kultur birika 1</foto1>
        <foto2>Kultur birika 2</foto2>
        <foto3>Kultur birika 3</foto3>
    </fotos>
</ficha>
<ficha>
    <tipo>ver</tipo>
    <subcategoria>museos</subcategoria>
    <nombre>B-TEK(Bizkaiko Teknologi Elkartegia</nombre>
    <coordenadas>
        <latitud>43,299197</latitud>
        <longitud>-2,868633</longitud>
    </coordenadas>
    <email>btek@btek.org</email>
    <redessociales></redessociales>
    <telefonos>
        <telefono1>944039500</telefono1>
                    <telefono2>946568844</telefono2> 
    </telefonos>
<direccion>Edificio 602 Parque Tecnológico, Astondo bidea, 48160 Elexalde</direccion>
    <web>www.btek.org</web>
<horariodevisita>Lunes a Jueves de 9h a 14h y de 15h a 18h
            Viernes de 9h a 14h
     Duración de la visita:Visita al Centro: 2 horas, Taller: 45 minutos
     ( Todas las visitas se deben reservar)</horariodevisita>
    <precio>3 € visita dinamizada sin taller
4 € visita dinamizada con taller</precio>
<descripcion>BTEK, el Centro de Interpretación de la Tecnología del Parque Científico y Tecnológico de Bizkaia tiene como objetivo acercar la tecnología a los jóvenes, sobre todo a los estudiantes de educación secundaria, impulsando la cultura científica-tecnológica. BTEK está ubicado en el edificio 602 del Parque, en el municipio de Derio.</descripcion>
    <fotos>
        <foto1>Btek1</foto1>
        <foto2>Btek2</foto2>
        <foto3> Btek3</foto3>
    </fotos>
</ficha>

XML 要大得多,但它不允许我全部粘贴。

4

1 回答 1

0

您需要先将 XML 字符串转换为 DOM 解析器对象,然后再像 DOM 树一样解析它。

// convert the xml string response to a DOM parser
xmlDoc = ( new DOMParser() ).parseFromString( xmlhttp.responseXML, "text/xml" );

现在,您可以使用您的解析方法。

希望有帮助。

于 2013-03-22T15:50:14.423 回答