我现在有一个问题:我有一个js代码,它创建了一个XML文档,一个简单的文档。 问题是,当我重新运行创建文档的函数时,它将较旧的替换为较新的。
我想要这样的东西:
<root>
<person>
<name>Jon</name>
<age>18</age>
</person>
<person>
<name>Paco</name>
<age>76</age>
</person>
<person>
<name>Marta</name>
<age>42</age>
</person>
</root>
但是我一次只能处理一个文档,我不能将新创建的xml文档“追加或推入”到第一个文档中。 本地存储总是存储最新的。 我的JS代码
userInputs来自表单标记
function addTodo(e) {
e.preventDefault();
const userInputHTMLCollection = document.getElementsByClassName("userAdd");
console.log(userInputHTMLCollection);
// EDITOR: added missing '=' below:
const userInput = [].map.call(
userInputHTMLCollection,
(element) => element.value
);
console.log(userInput[0]);
console.log(userInput[1]);
console.log(userInput[2]);
console.log(userInput[3]);
//Creem la plantilla XML.
txt1 = `<?xml version="1.0" encoding="UTF-8"?>`;
txt2 = `<filmoteca>`;
txt3 = `<peli>`;
txt4 = `<titol>` + userInput[0] + `</titol>`;
txt5 = `<genere>` + userInput[1] + `</genere>`;
txt6 = `<director>` + userInput[2] + `</director>`;
txt7 = `<any>` + userInput[3] + `</any>`;
txt8 = `</peli>`;
txt9 = `</filmoteca>`;
txt = txt1 + txt2 + txt3 + txt4 + txt5 + txt6 + txt7 + txt8 + txt9;
console.log("Text Principal" + txt);
parser = new DOMParser();
xmlDoc = parser.parseFromString(txt, "text/xml");
localStorage.setItem("data", xmlDoc);
console.log(xmlDoc);
var xmlString = new XMLSerializer().serializeToString(xmlDoc);
console.log(xmlString);
// ...
}
下面的函数将在LocalStorage中创建一个XMLDocument,但是我想继续添加更多。
下面是尝试将新xml添加或推入旧xml的代码
function afegirLS() {
const userInputHTMLCollection = document.getElementsByClassName("userAdd");
const userInput = [].map.call(
userInputHTMLCollection,
(element) => element.value
);
var informacio = localStorage.getItem("data");
txt2 = `<filmoteca>`;
txt3 = `<peli>`;
txt4 = `<titol>` + userInput[0] + `</titol>`;
txt5 = `<genere>` + userInput[1] + `</genere>`;
txt6 = `<director>` + userInput[2] + `</director>`;
txt7 = `<any>` + userInput[3] + `</any>`;
txt8 = `</peli>`;
txt9 = `</filmoteca>`;
txt_nou = txt1 + txt2 + txt3 + txt4 + txt5 + txt6 + txt7 + txt8 + txt9;
console.log("Text Nou" + txt_nou);
parser2 = new DOMParser();
afegirXML = parser2.parseFromString(txt_nou, "text/xml");
console.log(afegirXML);
//var xmlString2 = new XMLSerializer().serializeToString(string_vell);
//console.log(xmlString2);
//txt_nou.push(xmlString);
}
您似乎希望将多个XML文档存储到localStorage中,但您只是存储了单个文档。
function addTodo(e) {
// ...
xmlDoc = parser.parseFromString(txt, "text/xml");
localStorage.setItem("data", xmlDoc);
// ...
}
如果要存储多个文档,可以存储和检索一个数组。
let xmlDocs = [];
/ ...
function addTodo(e) {
let xmlDocs = JSON.parse(localStorage.getItem('data')) || [];
// ...
xmlDoc = parser.parseFromString(txt, "text/xml");
xmlDocs.push(xmlDoc);
localStorage.setItem('data', JSON.stringify(xmlDocs));
// ...
}
注意使用json.stringify()
将数组转换为字符串,使用json.parse()
将字符串转换回数组。 这保证localstorage
只存储字符串(根据需要)。