2012-02-15 3 views
1

Je souhaite stocker un document XML dans sessionStorage. Quand je fais cela, il semble enregistrer en tant que XMLDocument. Lorsque j'essaie d'y accéder (lors d'une actualisation de page), l'objet revient [object Object] par opposition à [object XMLDocument].HTML5 sessionStorage et XMLDocument

Comment puis-je obtenir les données sur sessionStorage comme XMLDocument (ou le convertir en un?)

+0

Avez-vous essayé new XmlDocument (objet)? – unludo

+0

@FelixKling Comment puis-je convertir (jQuery) xml en String et revenir en arrière? – Chris

Répondre

2

localStorage et sessionStorage ne peut contenir que des chaînes. Jetez un oeil à la interface definition:

interface Storage { 
    readonly attribute unsigned long length; 
    [IndexGetter] DOMString key(in unsigned long index); 
    [NameGetter] DOMString getItem(in DOMString key); 
    [NameSetter] void setItem(in DOMString key, in DOMString data); 
    [NameDeleter] void removeItem(in DOMString key); 
    void clear(); 
}; 

Vous ne pouvez pas stocker des objets à moins que vous sérialisation. Donc, dans votre cas, vous devez serialize it to XML.

Si vous avez reçu le document XML en tant que texte, il suffit de le stocker directement. Vous pouvez utiliser jQuery.parseXML() pour l'analyser après la récupération.

+0

'JSON.stringify()' est une méthode possible. – alex

+0

Comment est-ce que je peux sérialiser mon XML (using jQuery) à une chaîne? – Chris

+0

@alex: ne fonctionne probablement pas avec XMLDocument. Je suppose qu'il s'agit de références circulaires. Mais pour les "objets simples" vous avez raison. –

2

Vous pouvez sérialiser XMLDocument avant de l'enregistrer dans le stockage:

var xml = new XMLSerializer().serializeToString(originalDom); 
sessionStorage.setItem("myDocument", xml); 

et unserialize puis après le chargement des données de stockage:

var xml = sessionStorage.getItem("myDocument"); 
var restoredDom = new DOMParser().parseFromString(xml, "text/xml");