2011-11-27 18 views
6

Tengo un archivo XML como se muestra a continuación:local de HTML5 (XML/datos JSON)

<itemnumbers> 
<item> 
<itemno>123</itemno> 
<desc>Desc about 123</desc> 
</item> 

<item> 
<itemno>456</itemno> 
<desc/> 
</item> 

... 

</itemnumbers> 

me gustaría usar el local de HTML5 para almacenar los datos (y recuperar un acceso más rápido) ya que los datos XML no cambia regularmente

Estoy planeando convertirlo en JSON primero y luego almacenarlo en el LocalStorage. ¿Debo hacer eso en el código o tener los datos por adelantado en el archivo .JSON en lugar del archivo .xml?

¿Cómo puedo analizar los datos más adelante? Actualmente estoy usando código de jQuery para analizar ... algo así como:

$(this).find("itemno").each(function() 
{ 
$(this).text(); 
$(this).next().text() 
} 

¿El anterior trabajo de código después de la conversión de JSON?

Me gustaría recibir sugerencias sobre la mejor manera de abordar esto.

+4

XML es una cadena, una cadena JSON es, 'localStorage' puede contener cadenas. ¿Por qué quieres cambiar el formato de datos? – zzzzBov

+0

Bcoz del formato liviano de JSON .... XML, creo que tarda más tiempo en analizar ... – testndtv

+1

Si está en un archivo XML, ¿por qué no simplemente almacenar los datos en un archivo .js (como JSON) y ser hecho con eso? En cuanto al análisis XML, JavaScript analiza XML bastante bien y se optimiza prematuramente ... – zzzzBov

Respuesta

1

Estoy de acuerdo con algunos de los comentarios que podrían seguir usando XML. Si desea convertir a JSON, usaría un bucle For In en javascript para recorrerlo como lo haría con un objeto en javascript.

Sus datos en JSON:

{"itemnumbers": 
    { "item": {"itemno": 123, "desc": "Desc about 123"} } 
    { "item": {"itemno": 456, "desc": "Desc about 456"} } 
} 

bucle a través de los datos, cuando es el objeto JSON anterior:

for (item in data.itemnumbers) { 
    //do something with item data 
    console.log(data.itemnumbers[item].itemno); 
    console.log(data.itemnumbers[item].desc); 
} 

Para guardar un objeto en localStorage debe transformarla en un formato de cadena que puedes volver a buscarlo como un objeto. Puede utilizar JSON.stringify() para hacer que un objeto en una cadena y JSON.parse() para tirar de ella hacia fuera:

//saving object to localStorage 
localStorage['my_data'] = JSON.stringify(data); 

//fetching object from localStorage 
data = JSON.parse(localStorage['my_data']); 

Tenga cuidado porque estos métodos no son compatibles con Internet Explorer 7 y por debajo por lo que tendrá para encontrar una biblioteca de análisis compatible con ellos. Aquí hay un post que podrían ayudar con la compatibilidad:

Safely turning a JSON string into an object

+0

Thx mucho para esto ... Esto resuelve la primera mitad de mi pregunta ... ¿Cómo la guardo en el localStorage HTML5 y la recuperaré más tarde cuando esté disponible? – testndtv

+0

Debe guardar el objeto como una cadena en localStorage. Editaré la respuesta para incluir un ejemplo –

0

Yo te sugeriría que escribir un script que convierte los datos XML en JSON y luego enviarlo hacia el lado del cliente y guardarlo.

Luego analice el JSON cuando sea necesario, lo cual es muy fácil de hacer. Al igual que los siguientes: -

var jsonObject = JSON.parse(yourObjectInJSON); 

bucle a través de él: -

for (item in jsonObject.itemnumbers) { 
//do something with item data 
} 
Cuestiones relacionadas