简体   繁体   English

将用户输入写入XML文件

[英]Writing user input to XML File

I am working on a project in JSP. 我正在研究JSP中的一个项目。 Right now, my program successfully extracts contents from an XML file and outputs them into a div. 现在,我的程序成功从XML文件中提取内容并将它们输出到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). 我正在尝试将XML文件的内容更新为用户输入到文本框中的内容,然后调用Names()方法将更新文件的内容输出到div中(替换旧内容)。 However, my XML file isn't updating, and I am unsure on how to go about doing this. 但是,我的XML文件没有更新,我不确定如何执行此操作。 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: 我的XML文件:

<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. 现在,每当我点击更新按钮时,我只是将旧文件的内容一遍又一遍地“粘贴”到div上。 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. <input type = "button"不会自行提交表单。 Try changing the type attribute to submit : 尝试更改type属性以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);
}
%>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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