2012-03-26 56 views
0

我正在尝试使用JSP将表单数据存储在XML文件中。这样我输入多个条目后,但是,我得到了重复行:我如何在XML生成器中重复使用部分?

(似乎当记录2追加,记录2之前,整个事情被重写)

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Students> 
<Name>test1</Name> 
<Title>balala</Title> 
<URL>www.kaka.com</URL> 
</Students> 
<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Students> 
<Name>test1</Name> 
<Title>balala</Title> 
<URL>www.kaka.com</URL> 
<Name>test2</Name> 
<Title>nana</Title> 
<URL>www.lolo.com</URL> 
</Students> 

我正在使用的代码:

<body> 
    <h3>Get Data from the form</h3> 
    <p> 
    <% 
     //Get data from the form 
     String name= request.getParameter("name"); 
     String title=request.getParameter("title"); 
     String url= request.getParameter("url"); 
    %> 


    <%! 


     public void createXmlTree(String name,String title,String url) throws Exception { 


     Element root; 
     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = builderFactory.newDocumentBuilder(); 
     Document doc = docBuilder.newDocument(); 
     File file = new File("C:/Users/webservstu/Documents/new.xml"); 
     if (file.exists()) 
     { 
      doc = docBuilder.parse(file); 
      root = doc.getDocumentElement(); 
      String sr = root.getNodeName(); 
     } 
     else 
     { 

      System.out.println(name); 
      root = doc.createElement("Students"); 
      doc.appendChild(root); 
     } 


     Element child1 = doc.createElement("Name"); 
     root.appendChild(child1); 

     Text text1 = doc.createTextNode(name); 
     child1.appendChild(text1); 

     Element child2 = doc.createElement("Title"); 
     root.appendChild(child2); 

     Text text2 = doc.createTextNode(title); 
     child2.appendChild(text2); 

     Element child3 = doc.createElement("URL"); 
     root.appendChild(child3); 

     Text text3 = doc.createTextNode(url); 
     child3.appendChild(text3); 

     TransformerFactory factory = TransformerFactory.newInstance(); 
     Transformer transformer = factory.newTransformer(); 

     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 


     StringWriter sw = new StringWriter(); 
     StreamResult result = new StreamResult(sw); 
     DOMSource source = new DOMSource(doc); 
     transformer.transform(source, result); 
     String xmlString = sw.toString(); 
     FileWriter fw=new FileWriter(file,true); 
     BufferedWriter bw = new BufferedWriter(fw); 

     bw.write(xmlString); 
     bw.flush(); 
     bw.close(); 

    }%> 


<% 


    try 
    { 

    createXmlTree(name,title,url); 

    out.println("<b>Xml File Created Successfully</b>"); 
    } 
    catch(Exception e) 
    { 
    System.out.println(e); 
    } 

    %> 

    <br> 


    </p> 
    <hr> 

    <p><font size="2">*Direct Submission*</font></p> 

    </body> 

有什么想法?谢谢!!!

回答

0

这就是问题所在:

FileWriter fw=new FileWriter(file,true); 

你的第二个参数是追加到文件的末尾。

在另一方面,我会建议不要只是改变这一点 - 我建议使用FileOutputStream,而不是直接从创建StreamResult,所以它无任何其他编码的方式获得写入文件。实际上,即使文本本身声明它是UTF-8,也会使用平台默认编码来编写文本。

哎呀,你甚至不需要自己创建FileOutputStream - 你可以直接从File创建一个StreamResult

+0

感谢乔恩,我第一次尝试将第二个参数更改为false后。有效。但是,新添加的记录也包含在根类别“学生”中。无论如何,使它在一个新的“学生”包装?对不起,我对此很感兴趣。谢谢。 – eastboundr 2012-03-26 16:35:10

+0

@eastboundr:正如我所说的,你应该改变为不使用'FileWriter' ......但是如果你想创建一个新的'Student'元素,你将不得不调用'doc.createElement(“Student” )'并将所有元素添加到* that *元素,而不是直接添加到根节点。 – 2012-03-26 16:37:25

相关问题