2011-11-27 60 views
6

我有一个XML文件,如下所示:HTML5 localStorage的(XML/JSON数据)

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

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

... 

</itemnumbers> 

我想使用HTML5 localStorage的存储数据(和检索用于更快的访问),因为XML数据不会定期更改。

我打算先把它转换成JSON然后存放在localStorage中。我应该在代码中做到这一点,还是在.JSON文件而不是.xml文件中预先存储数据?

以后如何解析数据? 目前我使用jQuery的代码来解析...是这样的:

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

将在JSON转换后的上述代码的工作?

我想就如何处理此问题的最佳方法提出建议。

+4

XML是一个字符串,JSON是一个字符串,'localStorage'可容纳字符串。你为什么要改变数据格式? – zzzzBov

+0

JSON的轻量级格式的Bcoz ....我认为,XML需要更长的时间来解析... – testndtv

+1

如果它在XML文件中,为什么不将数据存储在.js(如JSON)文件中并且是用它完成?至于解析XML,JavaScript解析XML相当好,你会过早地优化... – zzzzBov

回答

1

我同意一些意见,你可以继续使用XML。如果你想转换为JSON,你可以在JavaScript中使用For In循环来循环它,就像你在javascript中的对象一样。

你在JSON数据:

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

循环通过你的数据,其中的数据是JSON对象上:

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

要保存在localStorage的一个对象,你必须将其转换为字符串格式你可以作为一个对象再次取出。您可以使用JSON.stringify()使对象的字符串和JSON.parse()把它背出来:

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

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

当心,因为这些方法不支持IE7及以下所以你需要找到与它们兼容的解析库。这里有一个职位可能与兼容性帮助:

Safely turning a JSON string into an object

+0

Thx很多这....这解决了我的问题的前半部分....我如何将它保存到HTML5 localStorage和稍后检索它可用? – testndtv

+0

您需要将对象保存为localStorage的字符串。我将编辑答案以包含一个示例 –

0

我建议你写的XML数据转换成JSON的脚本,然后将其发送到客户端,并将其保存。

稍后在需要时解析JSON,这很容易做到。就像下面: -

var jsonObject = JSON.parse(yourObjectInJSON); 

通过它循环: -

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