2012-03-26 5 views
0

Ich versuche, JSP zu verwenden, um Formulardaten in XML-Datei zu speichern. Aber ich habe wiederholt Linien, nachdem ich mehrfache Eingaben wie folgt aus:Wie kommt es, dass ich Teile in meinem XML-Builder wiederholt habe?

(erscheint, wenn Datensatz 2 angehängt wird, das Ganze vor dem Datensatz 2 neu geschrieben)

<?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> 

Der Code Ich verwende:

<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> 

Irgendwelche Gedanken? Vielen Dank!!!

Antwort

0

Das ist das Problem:

FileWriter fw=new FileWriter(file,true); 

Ihr zweites Argument ist zu bis zum Ende der Datei anhängen.

Auf der anderen Seite würde ich empfehlen, gegen eben diese zu ändern - ich würde vorschlagen, mit FileOutputStream statt und ein StreamResult direkt von der Erstellung, so schreibt es gerade in die Datei ohne andere Codierungen in der Quere . Wie auch immer, Sie verwenden die Standardkodierung der Plattform, um den Text zu schreiben, obwohl der Text selbst erklärt, dass er in UTF-8 ist.

Heck, Sie müssen nicht einmal die selbst erstellen - Sie können eine StreamResult direkt aus der File erstellen.

+0

Danke Jon, nachdem ich zuerst versucht habe, das zweite Argument in false zu ändern. Es funktionierte. Der neu hinzugefügte Datensatz ist jedoch auch in der Stammkategorie "Student" enthalten. Wie auch immer, um es in einem neuen "Student" Wrapper zu machen? Tut mir leid, ich bin neu hier. Vielen Dank. – eastboundr

+0

@eastboundr: Wie ich schon sagte, sollte man 'FileWriter' trotzdem nicht benutzen ... aber wenn man ein neues' Student' Element erstellen will, muss man 'doc.createElement (" Student ") aufrufen) 'und füge alle Elemente zu * that * Elementen hinzu, anstatt direkt zum Wurzelknoten. –

Verwandte Themen