I am trying to write an XML document from an HTML form using JavaScript with the following function:
JavaScript function:
function formToXml(form){ var xmldata=['<?xml version="1.0" encoding="UTF-8"?>']; const elNames = ["author", "title"]; xmldata.push("<book>"); var inputs=form.elements; for(var i=0;i<inputs.length;i++){ var el=document.createElement(elNames[i]); if (inputs[i].name){ el.set("name",inputs[i].name); el.setAttribute("value",inputs[i].value); xmldata.push(el.outerHTML); } } xmldata.push("</book>"); return xmldata.join("n"); }
The file that is generated has the following format:
<?xml version="1.0" encoding="UTF-8"?> <book> <author value="Something" name="author"/> <title value="Something" name="title"/> </book>
I am trying to modify the method in order for the nodes to have the following format:
<author>Something</author> <title>Something</title>
I know that setAttribute() doesn’t work because it makes an attribute in the node. I can’t find a function that sets the value like the example above.
Any suggestions?
Advertisement
Answer
You can use the innerHTML
attribute on the element to set the value.
function formToXml(form) { var xmldata = ['<?xml version="1.0" encoding="UTF-8"?>']; const elNames = ["author", "title"]; xmldata.push("<book>"); var inputs = form.elements; for (var i = 0; i < inputs.length; i++) { var el = document.createElement(elNames[i]); if (inputs[i].name) { el.innerHTML = inputs[i].value; // Set the innerHTML of the element xmldata.push(el.outerHTML); } } xmldata.push("</book>"); return xmldata.join("n"); }
Example output:
<?xml version="1.0" encoding="UTF-8"?> <book> <author>Robert Louis Stevenson</author> <title>Treasure Island</title> </book>