How to write form data in HTML to XML using Javascript

This is an assignment from my class. I need to create a registration page. When the user clicks the submit button, I take all the information about the form and write it to an existing XML file using Javascript. This is done on the client side, only through HTML, Javascript and XML. By the way, my professor deliberately did not teach us how to do this, because he wants us to explore it ourselves. Also, I'm not very familiar with Javascript, especially with built-in functions, if possible, explain what each line or method of code does.

Let me start by looking at my existing XML:

<?xml version ="1.0" encoding="utf-8" ?> <!--GGFGFGFVBFVVVHVBV--> <PersonInfo> <Person Usrname="Bob111" Pswd="Smith111" personid="111" FirstName="Bob" LastName="Smith" DOB="01/01/1960" Gender="M" Title="Hello1"> </Person> <!-- several more lines of <person> here --> </PersonInfo> 

When saving form data, it should follow the entire layout inside, basically I need Usrname, Pswd, personid, etc.

Basically, from what I understand, I need to create an XML string "Man" on my registration page after clicking "Submit". Then click on the array that already has my XML information, and then write to my XML document with the information about the array. My problem is that I donโ€™t know exactly how to do this.

For those who want to know what my registration page looks like, here it is:

  <html> <head> <title>Registration</title> <link rel="stylesheet" type="text/css" href="CSS_LABs.css" /> </head> <body> <div class="form"> <form id="Registration" action="" method="get"> Username:<input type="text" name="usrname" maxlength="10"/> <br/> Password:<input type="password" name="pswd" maxlength="20"/> <br/> <hr> PersonID:<input type="text" name="PID" /> <br> <hr> First Name:<input type="text" name="fname"/> <br> Last Name:<input type="text" name="lname"/> <hr> DOB:<input type="text" name="dob" /> <br> <hr> Gender:<input type="text" name="sex" /> <br> <hr> Title:<input type="text" name="title" /> <br> <hr> Secret Question:<br> <select name="secret?"> </select> <br> Answer:<input type="text" name="answer" /> <br> <br> <input type="submit" value="submit" /> </form> </div> </body> </html> 

By the way, I know that certain information about my HTML document cannot be written correctly, so I hope you guys donโ€™t mind. In addition, I would also have to fix my XML later, answering the security question later.

Okay, thanks in advance guys.

UPDATE !!!

So we finally figured out how to create an XML document with Javascript, here is the code:

  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var FILENAME = 'G:\\CST2309 - Web Programming 1\\Copy of Take Home Exam - Copy\\PersonXML2.xml'; function SaveXML(UserData) { var file = fso.CreateTextFile(FILENAME, true); file.WriteLine('<?xml version="1.0" encoding="utf-8"?>\n'); file.WriteLine('<PersonInfo>\n'); for (countr = 0; countr < UserData.length; countr++) { file.Write(' <Person '); file.Write('Usrname="' + UserData[countr][0] + '" '); file.Write('Pswd="' + UserData[countr][1] + '" '); file.Write('PersonID="' + UserData[countr][2] + '" '); file.Write('FirstName="' + UserData[countr][3] + '" '); file.Write('LastName="' + UserData[countr][4] + '" '); file.Write('Gender="' + UserData[countr][5] + '" '); file.Write('DOB="' + UserData[countr][6] + '" '); file.Write('Title="' + UserData[countr][7] + '"'); file.WriteLine('></Person>\n'); } // end for countr file.WriteLine('</PersonInfo>\n'); file.Close(); } // end SaveXML function -------------------- function LoadXML(xmlFile) { xmlDoc.load(xmlFile); return xmlDoc.documentElement; } //end function LoadXML() function initialize_array() { var person = new Array(); var noFile = true; var xmlObj; if (fso.FileExists(FILENAME)) { xmlObj = LoadXML(FILENAME); noFile = false; } // if else { xmlObj = LoadXML("PersonXML.xml"); //alert("local" + xmlObj); } // end if var usrCount = 0; while (usrCount < xmlObj.childNodes.length) { var tmpUsrs = new Array(xmlObj.childNodes(usrCount).getAttribute("Usrname"), xmlObj.childNodes(usrCount).getAttribute("Pswd"), xmlObj.childNodes(usrCount).getAttribute("PersonID"), xmlObj.childNodes(usrCount).getAttribute("FirstName"), xmlObj.childNodes(usrCount).getAttribute("LastName"), xmlObj.childNodes(usrCount).getAttribute("Gender"), xmlObj.childNodes(usrCount).getAttribute("DOB"), xmlObj.childNodes(usrCount).getAttribute("Title")); person.push(tmpUsrs); usrCount++; } //end while if (noFile == false) fso.DeleteFile(FILENAME); SaveXML(person); } // end function initialize_array() 

What this code does here is that it takes my original XML file and loads it into an array so that it can create a new XML file. Basically, I got the creation of part of the XML file, but I still need help with the rest of my stuff.

My goal is to take the data of my form and insert it into my existing array, and not overwrite it, add to it so that I can update the existing XML file with the new registration information. Here I do not know how to do this. Some pointers will be nice.

+4
source share
3 answers

By the way, my professor deliberately did not teach us how to do this, because he wants us to explore it ourselves.

Which should give you a hint of searching a little deeper. In any case, I will not comment on each line, but I will offer some tips.

  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 

This is a proprietary way to create a Microsoft XML document, and it usually terminates in try..catch, since different ActiveXO objects are provided in different versions of IE. You also need to look for document.implementation.createDocument .

  //DEFINE LOAD METHOD function LoadXML(xmlFile) { xmlDoc.load(xmlFile); 

You might want to check the async parameter.

  xmlObj = xmlDoc.documentElement; } //declare & initialize array var arrPerson = new Array(); 

It is believed that it is better to use an array literal: ... = [];

  //initialize array w/ xml function initialize_array() { LoadXML("PersonXML.xml"); var x = 0; while (x < xmlObj.childNodes.length) 

Getting the length of xmlObj.childNodes in each loop is inefficient, consider storing the length and comparing with this value.

  { var tmpArr = new Array(xmlObj.childNodes(x).getAttribute("Usrname"), xmlObj.childNodes(x).getAttribute("Pswd"), xmlObj.childNodes(x).getAttribute("FirstName"), xmlObj.childNodes(x).getAttribute("LastName"), xmlObj.childNodes(x).getAttribute("DOB"), xmlObj.childNodes(x).getAttribute("Gender"), xmlObj.childNodes(x).getAttribute("Title")); 

It is inefficient to access xmlObj.childNodes (x) several times. Save the link and reuse it.

  arrPerson.push(tmpArr); 

You can assign values โ€‹โ€‹directly to arrPerson and get rid of tmpArr.

  x++; 

Using a plain for loop will increment x for you.

  } } //Validation function LogInVal(objtxt) { if(objtxt.value.length == 0) { objtxt.style.background = "red"; return 1; } else { objtxt.style.background = "white"; return 0; } } 

Not all browsers allow you to set the background color of input elements.

  //main validation function MainVal(objForm) { var errmsg = "empty field"; var errmsg2 = "Incorrect Username and Password"; 

You may need a more efficient way of naming error messages and linking them to other information for this message. An object can do the job.

  var msg = "You have logged in successfully"; var errCount = 0; var usrn = document.getElementById("usrname1").value; var pswd = document.getElementById("pswd1").value; errCount += LogInVal(objForm.usrname); errCount/*1*/ += LogInVal(objForm.pswd); initialize_array(); if (errCount != 0) { alert(errmsg); return false; } else if(authentication(usrn, pswd) == true) 

The authentication() function returns true or false, so you do not need to compare it with anything, you can just check the return value (i.e. there is no need for == true above).

  { alert(msg); return true; setCookie('invalidUsr',' ttttt'); } else { alert(errmsg2); return false; } } 

Instead of showing warning messages one at a time in a warning, consider placing them in a document next to the elements to which they relate. Thus, the user can see messaeg when fixing the error.

+5
source

Do not cheat on us? Your implementation will probably only work in IE, I would recommend using jQuery, as it is impressively effective in parsing XML.

I'm not sure why he wants you to write out XML, as it is not very intuitive from JavaScript. You can do something like this via jQuery

 //I capture form submitevent $('form').submit(function( ev ){ ev.preventDefault(); //I keep form from submitting $( xmlDocument ).find('Person').attr({ username: $("input[name=usrname]), password: $("input[name=pswd]), //and so on }); }); 

It depends on how you report this xml file.

+2
source

Here I share my experience writing html form data in xml.

  • Create one html file in one place ( D:\\HtmlToXml.html ).
  • And open it using Internet Explorer.
  • Then, after providing the information and click the submit button, then one file is created in the same directory as example.xml .
  • If after creating xml, the next time you click the Submit button, the click data will be added to the same XML file.

  <!DOCTYPE html> <html> <head> <title>Display Emp Details</title> <script type="text/javascript" language="javascript"> var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var FILENAME='D:\\example.xml'; function SaveXMLData() { validations(); } function createfile() { var file; var e1=document.getElementById('empName').value; var p1=document.getElementById('empNumber').value; var em1=document.getElementById('empEmail').value; var d1=document.getElementById('empDate').value; var tablemain = document.getElementById('tblmain'); if(fso.fileExists(FILENAME)) { xmlDoc.load(FILENAME); var lng; lng=xmlDoc.getElementsByTagName("Details"); var xmlread= fso.OpenTextFile(FILENAME,1,true,0); var x=xmlread.readAll(); var replace=x.replace('</Emp>',''); var sno=lng.length + 1; file=fso.OpenTextFile(FILENAME,2,true); file.writeLine(replace); file.WriteLine('<Details category="'+sno+'">'); file.WriteLine('<SNo>'+sno+'</SNo>'); file.WriteLine('<Name>'+e1+'</Name>'); file.WriteLine('<PhoneNumber>'+p1+'</PhoneNumber>'); file.WriteLine('<Emailid>'+em1+'</Emailid>'); file.WriteLine('<Date>'+d1+'</Date>'); file.WriteLine('</Details>'); file.WriteLine('</Emp>'); alert('another file updated'); } else { file= fso.CreateTextFile(FILENAME, true); file.WriteLine('<?xml version="1.0" encoding="utf-8" ?>'); file.WriteLine('<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>'); file.WriteLine('<Emp>'); file.WriteLine('<Details category="1">'); file.WriteLine('<SNo>'+1+'</SNo>'); file.WriteLine('<Name>'+e1+'</Name>'); file.WriteLine('<PhoneNumber>'+p1+'</PhoneNumber>'); file.WriteLine('<Emailid>'+em1+'</Emailid>'); file.WriteLine('<Date>'+d1+'</Date>'); file.WriteLine('</Details>'); file.WriteLine('</Emp>'); alert('file updated'); } <!-- displayData();--> document.getElementById('empName').value=''; document.getElementById('empNumber').value=''; document.getElementById('empEmail').value=''; document.getElementById('empDate').value=''; addRow('tablemain'); file.close(); } function validations() { var emp1=document.getElementById('empName').value; var letters = /^[\s A-Za-z]+$/; if(emp1!="") { if(emp1.match(letters)) { allnumeric(); } else { alert('Please input alphabet characters only'); return false; } } else { alert('Please Enter Name.'); } } <!--For checking Email--> function checkemail() { var email = document.getElementById('empEmail'); var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if(email.value!="") { if (!filter.test(email.value)) { alert('Please provide a valid email address'); return false; } else { DateValidation(); } } else { alert('Please Enter Email.'); } } <!--For checking Date Format--> function DateValidation() { var date=/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{2,4}$/; var empDate=document.getElementById("empDate"); if(empDate.value!="") { if(empDate.value.match(date)) { createfile(); } else { alert("Please provide valid date : DD-MM-YY(YYYY)"); return(false); } } else { alert('Please Enter Date.'); } } <!--For checking phone number--> function allnumeric() { var numbers=/^\d{10}$/; var empNumber=document.getElementById("empNumber"); if(empNumber.value!="") { if(empNumber.value.length=="10") { if(empNumber.value.match(numbers)) { checkemail(); } else { alert("Phone number should be numeric"); return(false); } } else { alert('Phone Number should be like: 9876543210'); } } else { alert('Please Enter Phone Number.'); } } function addRow(id) { if(fso.fileExists(FILENAME)) { xmlDoc.load(FILENAME); var x; x=xmlDoc.getElementsByTagName("Details"); var table = document.getElementById('tbl'); var nxtbtn= document.getElementById("btnnext"); var prvbtn=document.getElementById("btnprev"); nxtbtn.disabled=true; prvbtn.disabled=true; if(x.length >5) { nxtbtn.disabled=false; } var j=0;k=5; if(k>x.length) {k=x.length;} var store=document.getElementById("txtstore"); var maxval=document.getElementById("txtmax"); if(id=="btnprev") { if((store.value % k)==0) { store.value = store.value - k ; if(store.value>0) { j = parseInt(store.value); k += parseInt(store.value); } } else { store.value =store.value - (store.value % k) ; if(store.value >0) { j = store.value - k; k = store.value; } } if(j > 0) { prvbtn.disabled=false; } } if(id=="btnnext") { if(store.value==0) { store.value=table.rows.length; } else if(store.value <0) { store.value=maxval.value; } prvbtn.disabled=false; if(store.value >=k) { j +=parseInt(store.value); k +=parseInt(store.value); if(k >= x.length) { k=x.length; nxtbtn.disabled = true; prvbtn.disabled = false; } } } table.innerHTML = ""; var rowCount = 0; for (i=j;i<k;i++) { var row = table.insertRow(rowCount); var cell1 = row.insertCell(0); var element1 = document.createElement("input"); element1.type = "checkbox"; element1.id = "id2" ; cell1.appendChild(element1); // Create label var label = document.createElement("label"); label.htmlFor = "id2" ; cell1.appendChild(label); var cell2 = row.insertCell(1); cell2.innerHTML = x[i].getElementsByTagName("SNo")[0].childNodes[0].nodeValue; var name = row.insertCell(2); var elname =document.createElement("input"); elname.type = "text"; elname.readOnly=true; elname.value=x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue; name.appendChild(elname); var phnno = row.insertCell(3); var elphn =document.createElement("input"); elphn.type = "text"; elphn.readOnly=true; elphn.value=x[i].getElementsByTagName("PhoneNumber")[0].childNodes[0].nodeValue; phnno.appendChild(elphn); var email = row.insertCell(4); var elemail =document.createElement("input"); elemail.type = "text"; elemail.readOnly=true; elemail.value=x[i].getElementsByTagName("Emailid")[0].childNodes[0].nodeValue; email.appendChild(elemail); var date = row.insertCell(5); var eldate =document.createElement("input"); eldate.type = "text"; eldate.readOnly=true; eldate.value=x[i].getElementsByTagName("Date")[0].childNodes[0].nodeValue; date.appendChild(eldate); rowCount +=1; } maxval.value=x[table.rows.length - 1].getElementsByTagName("SNo")[0].childNodes[0].nodeValue; if(id=="btnprev") { store.value =store.value - 5; } else { store.value =parseInt(k); } } } </script> </head> <body onload="addRow('tbl')"> <form id="empForm" action="" method="get"> <p><b>Emp Registration:</b></p> <table> <tr> <td>Name:</td> <td><input type="text" id="empName" maxlength="25"/></td> </tr> <tr> <td>Phone Number:</td> <td><input type="text" id="empNumber" maxlength="10"/></td> </tr> <tr> <td>EmailId:</td> <td><input type="text" id="empEmail"/></td> </tr> <tr> <td>Date:</td> <td><input type="text" id="empDate" maxlength="10"/></td> </tr> <tr> <td align="center"> <input type="button" value="Submit" onclick="SaveXMLData()"/></td> <td> <input type="button" value="Show Data" id="show" onclick="displayData(this.id)" style="display:none;"/></td> </tr> </table> <!-- <table><tr><td><input type="button" onclick="displayData(this.id)" value="Prev" id="prev" disabled="disabled"></td> <td><input type="button" onclick="displayData(this.id)" value="Next" id="next" disabled="disabled"></td></tr></table> --> <div id='displaydatadiv'> </div> <!-- <INPUT type="button" value="Add Row" onclick="addRow('tbl')" /> --> <div style="height: 135px; width:650px; background-color: Lavender;" > <TABLE id="tbl" width="350px"> </TABLE> </div> <table id="tblmain" border="1" style="display:true" ></table> <input type="button" id="btnprev" value="Prev" onclick="addRow(this.id)" disabled="disabled"> <input type="button" id="btnnext" value="Next" onclick="addRow(this.id)" disabled="disabled"> <input type="hidden" id="txtstore" style="display:none;"> <input type="hidden" id="txtmax" style="display:none;"> </body> </html> 
0
source

All Articles