2011-11-27 39 views
6

Tôi có một file XML như hình dưới đây:HTML5 localStorage (XML/JSON dữ liệu)

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

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

... 

</itemnumbers> 

Tôi muốn sử dụng HTML5 localStorage để lưu trữ các dữ liệu (và lấy cho truy cập nhanh hơn) kể từ khi dữ liệu XML không thay đổi thường xuyên.

Tôi dự định chuyển đổi nó thành JSON trước và sau đó lưu trữ nó trong localStorage. Tôi có nên làm điều đó trong mã hoặc có dữ liệu trả trước trong tệp .JSON thay vì tệp .xml không?

Làm cách nào để phân tích cú pháp dữ liệu sau? Hiện nay tôi đang sử dụng mã jQuery để phân tích ... cái gì đó như:

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

công việc mã trên sau khi chuyển đổi JSON Sẽ?

Tôi muốn các đề xuất về cách tốt nhất để tiếp cận vấn đề này.

+4

XML là một chuỗi, JSON là một chuỗi, 'localStorage' thể giữ chuỗi. Tại sao bạn muốn thay đổi định dạng dữ liệu? – zzzzBov

+0

Bcoz của định dạng nhẹ JSON .... XML, tôi nghĩ, mất nhiều thời gian hơn để phân tích ... – testndtv

+1

Nếu nó nằm trong tệp XML, tại sao không chỉ lưu trữ dữ liệu trong tệp .js (dưới dạng JSON) và thực hiện với nó? Theo phân tích cú pháp XML, JavaScript phân tích cú pháp XML khá tốt và bạn sẽ tối ưu hóa sớm ... – zzzzBov

Trả lời

1

Tôi đồng ý với một số nhận xét mà bạn có thể tiếp tục sử dụng XML. Nếu bạn muốn chuyển đổi sang JSON, bạn sẽ sử dụng vòng lặp For In trong javascript để lặp qua nó giống như bạn làm một đối tượng trong javascript.

Dữ liệu của bạn trong JSON:

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

Looping thông qua dữ liệu của bạn, nơi dữ liệu là đối tượng JSON trên:

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

Để lưu một đối tượng trong localStorage bạn phải chuyển đổi nó sang một định dạng chuỗi bạn có thể lấy lại một lần nữa làm đối tượng. Bạn có thể sử dụng JSON.stringify() để làm cho một đối tượng một chuỗi và JSON.parse() để kéo nó lại ra:

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

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

Cẩn thận vì các phương pháp này không được hỗ trợ trên IE7 và dưới, do đó bạn sẽ cần để tìm thư viện phân tích cú pháp tương thích với chúng. Dưới đây là một bài mà có thể giúp đỡ với khả năng tương thích:

Safely turning a JSON string into an object

+0

Thx rất nhiều cho điều này .... Điều này giải quyết nửa đầu của câu hỏi của tôi .... Làm thế nào để lưu nó vào localStorage HTML5 và lấy sau khi nó có sẵn? – testndtv

+0

Bạn cần lưu đối tượng dưới dạng chuỗi vào localStorage. Tôi sẽ chỉnh sửa câu trả lời để bao gồm một ví dụ –

0

tôi sẽ đề nghị bạn viết một kịch bản có thể chuyển đổi dữ liệu XML vào JSON và sau đó gửi nó qua phía bên khách hàng và lưu nó.

Sau đó phân tích cú pháp JSON khi được yêu cầu, rất dễ thực hiện. Cũng giống như sau: -

var jsonObject = JSON.parse(yourObjectInJSON); 

Looping qua nó: -

for (item in jsonObject.itemnumbers) { 
//do something with item data 
} 
Các vấn đề liên quan