• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 307
  • Last Modified:

Writing to xml with java

I have a java application that reads from an xml file, parses the file, updates the values stored in the tree but i don't know how to save the changes to the XML file. I've included the code below. I know it's a bit distorted but maybe you might be able follow it. I do't think you need to see the xml file but i can include it if it will help. In the class writeTree i've began writing to the xml file. Do i have to write each node and child to the xml file seperately or is there an easier way. Any help would be much appreciated, Thanks

import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.File;
import java.io.*;
import java.text.*;

public class Parse{
     public static void main(String args[]){
          File docFile = new File("students.xml");
          Document doc = null;
          try{
               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
               DocumentBuilder db = dbf.newDocumentBuilder();
               doc = db.parse(docFile);
          }catch(Exception e){
               System.out.println("error parsing file");
          }
          Element root = doc.getDocumentElement();
          System.out.println("Root: "+root.getNodeName());
         
          transverseDomTree(root);          
          //getSubjects(root);
          //getResult(root);
          //createElement(root, doc);
          //writeTree(doc);
     }
     
     public static void transverseDomTree(Node start){
          Node child;
          System.out.println(start.getNodeName()+"="+
          start.getNodeValue());
          for(child = start.getFirstChild();child!=null;child=
               child.getNextSibling()){
               transverseDomTree(child);
          }
     }
     
     public static void getSubjects(Element start){
          NodeList subjects = start.getElementsByTagName("subject");
          for (int i = 0;i < subjects.getLength();i++){
               
               NamedNodeMap atts = subjects.item(i).getAttributes();
               System.out.println(atts.item(0).getNodeValue());
               //System.out.println(subjects.item(i).getChildNodes().item(1).getFirstChild().getNodeValue());          
          }
     }
     
     public static void getResult(Element start){
          System.out.println("Enter subject name: ");
          String input = new String();
          BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
          try{
               input = console.readLine();
               NodeList subjects = start.getElementsByTagName("subject");
                    for (int i = 0;i < subjects.getLength();i++){
                    NamedNodeMap atts = subjects.item(i).getAttributes();
                    if(input.equals(atts.item(0).getNodeValue())){
                         float result = Float.parseFloat(subjects.item(i).getChildNodes().item(1).getFirstChild().getNodeValue());
                         System.out.println("Subject: "+atts.item(0).getNodeValue()+
                                                "Result: "+result);
                    }    
          }
          }catch (IOException e) {
            System.out.println("name = < "+ e + ">");
        }
         
     }
     
     public static void createElement(Element start, Document doc){
          Element subjectNode = doc.createElement("subject");
          Element resultNode = doc.createElement("result");
          subjectNode.setAttribute("name","Java Programming");
          resultNode.appendChild(doc.createTextNode("60.00"));
          subjectNode.appendChild(resultNode);
          start.insertBefore(subjectNode,start.getLastChild());
     }
     
     public static void removeChild(Element start){
          System.out.println("Enter subject to be deleted: ");
          String input = new String();
          BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
          try{
               input = console.readLine();
               NodeList subjects = start.getElementsByTagName("subject");
                    for (int i = 0;i < subjects.getLength();i++){
                    NamedNodeMap atts = subjects.item(i).getAttributes();
                    if(input.equals(atts.item(0).getNodeValue())){
                              Element deleted=null;
                              deleted.removeChild(atts.item(0));
                    }    
          }
          }catch (IOException e) {
            System.out.println("name = < "+ e + ">");
        }
     }
     
     public static void writeTree(Document doc){
          try{
               File newFile = new File("students.xml");
               FileWriter newFileStream = new FileWriter(newFile);
               newFileStream.write("<?xml version=\"1.0\"?>\n");
               newFileStream.close();
          }catch (IOException e) {
            System.out.println("name = < "+ e + ">");
        }
     }
}
0
liamgannon
Asked:
liamgannon
  • 2
1 Solution
 
liamgannonAuthor Commented:
Great help, thanks
0
 
CEHJCommented:
:-)
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now