简体   繁体   中英

Writing user input to XML File

I am working on a project in JSP. Right now, my program successfully extracts contents from an XML file and outputs them into a div. I also have some textboxes that read user input. I'm trying to update the contents of my XML file to what the user input into the textbox and then call the Names() method to output the contents of the updated file into the div (replacing the old contents). However, my XML file isn't updating, and I am unsure on how to go about doing this. Here is my code:

<script src ="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
 <div id ="nameDiv"></div>
<div id = "nameInput">

  <input type = "text" name = "nameOne"  value = "Enter a Name" onClick = "if(this.value == 'Enter a Name'){this.value = '';}" /> 
 <input type = "text" name="nameTwo"  value = "Enter a Name" onClick = "if(this.value == 'Enter a Name'){this.value = '';}" /> 
  <input type ="text"  name = "nameThree"  value = "Enter a Name" onClick = "if(this.value == 'Enter a Name'){this.value = '';}" /> 
  <input type = "button" name = "btnUpdate" value = "Update Name" /></div> 

<% String name1 = request.getParameter("nameOne");
 String name2 = request.getParameter("nameTwo");
 String name3 = request.getParameter("nameThree");
 File file  = new File("Employees.xml");

 public void updateXML(){

      if(name1 ! = '' || name2 != '' || name3 != ''){

         try{
          DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
          DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
          Document document = documentBuilder.parse(file);

          Node firstNameLine = document.getElementsByTagName("People").item(0);
          Node secNameLine = document.getElementsByTagName("People").item(1);
          Node thirdNameLine = document.getElementsByTagName("People").item(2);

          firstNameLine.setText(name1);
          secNameLine.setText(name2);
          thirdNameLine.setText(name3);

          TransformerFactory transformerFactory = TransformerFactory.newInstance();
          Transformer transformer = transformerFactory.newTransformer();
          transformer.setOutputProperty(OutputKeys.INDENT, "yes");
          StringWriter sw = new StringWriter();
          StreamResult result = new StreamResult(sw);
          DOMSource domSource = new DOMSource(document);

          transformer.transform(domSource, result);
          String xmlString = sw.toString();
          FileWriter fw=new FileWriter(file,true);
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(xmlString);
          bw.flush();
          bw.close();
          }
          catch(Exception e)
          {

         }
      }
     }
         public void buttonOnClick () throws ServletException, IOException {

             if (request.getParameter("btnUpdate") != null) {
              updateXML();
           }
        }
   %>

function getOutput()
{
  if (xmlhttp.readyState==4)
  {
  document.getElementById("nameInput").innerHTML=xmlhttp.responseText;
  }
}

function loadXMLDoc(dname) {


              if (window.XMLHttpRequest) {
                  xmlhttp = new XMLHttpRequest();
              }

              else {
                  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
              }

               xmlDoc.async = false;
                 xmlDoc.load(dname);
                xmlDoc.save("Employees.xml");
                return (xmlDoc);
         }

 function Names() {
      var xml = getXML();
      var txt = "";
      $(xml).find("Person").each(function () {
        txt += "<div>" + $(this).text() + "</div>";
      });
      $("body").append(txt);
    }

    Names();

My XML File:

<People>
  <Person>George</Person>
<Person>Mary</Person>
<Person>John</Person>
</People>

Right now, everytime I hit the update button, I just get the contents of the old file being "pasted" onto the div over and over again. It does not post the user input. Where am I going wrong? Any help would be appreciated.

Are you sure the form is actually being submitted? The <input type = "button" won't submit the form on its own. Try changing the type attribute to submit :

<input type = "submit" name = "btnUpdate" value = "Update Name" /></div> 

I have tried this example to update the data of persons with the data entered in the form.Please look into this if it is help ful to you.

<%@page import="org.w3c.dom.Node"%>
<%@page import="org.w3c.dom.NodeList"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.FileReader"%>
<%@page import="org.w3c.dom.Attr"%>
<%@page import="javax.xml.transform.TransformerFactory"%>
<%@page import="javax.xml.transform.Transformer"%>
<%@page import="javax.xml.transform.dom.DOMSource"%>
<%@page import="javax.xml.transform.stream.StreamResult"%>
<%@page import="java.io.File"%>
<%@page import="org.w3c.dom.Element"%>
<%@page import="org.w3c.dom.Document"%>
<%@page import="javax.xml.parsers.DocumentBuilderFactory"%>
<%@page import="javax.xml.parsers.DocumentBuilder"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%

    DocumentBuilderFactory dbfact = DocumentBuilderFactory.newInstance();
    try {

        String ufname = request.getParameter("fname");
        String ulname = request.getParameter("lname");

        DocumentBuilder docbuilder = dbfact.newDocumentBuilder();

        Document doc = docbuilder.newDocument();
        Element rootElement = doc.createElement("People");
        doc.appendChild(rootElement);

        Element staff = doc.createElement("staff");
        rootElement.appendChild(staff);

        Attr attr = doc.createAttribute("id");
        attr.setValue("1");

        Element firstname = doc.createElement("person");
        firstname.appendChild(doc.createTextNode(ufname));
        staff.appendChild(firstname);

        /*Element firstname1 = doc.createElement("person");
        firstname1.appendChild(doc.createTextNode("Mahesh"));
        staff.appendChild(firstname1);*/

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("D:\\file.xml"));

        transformer.transform(source, result);

        System.out.println("File saved!");

%>

<%

    File fXmlFile = new File("D:\\file.xml");

    Document docs = docbuilder.parse(fXmlFile);
    docs.getDocumentElement().normalize();
    System.out.println("Root element :" + docs.getDocumentElement().getNodeName());

    NodeList nList = docs.getElementsByTagName("staff");
    for (int temp = 0; temp < nList.getLength(); temp++) {
        Node nNode = nList.item(temp);
        System.out.println("\nCurrent Element :" + nNode.getNodeName());
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement = (Element) nNode;
%>
<%=eElement.getElementsByTagName("person").item(0).getTextContent()%>
<%
        }
    }
%>
<%

 } catch (Exception e) {
 System.out.println("Exception" + e);
}
%>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM