Link to home
Start Free TrialLog in
Avatar of LFC1980
LFC1980

asked on

permanently change a file

Hello,

I have an xml file and I would like to change a value of one of it's nodes, which I have done using:

 nodeListOfColours.item(i).getAttributes().getNamedItem("val").setNodeValue("#123456");


I need to keep the file so I used the above line on a copy of the original file.

This seems to work fine (as a System.out during run-time indicates the value has indeed changed - using 'getNodeValue') , but when I look at the second file after the program has exectued the value is exactly the same as the value in the original first - it hasn't changed.

Is this a file I/O issue or something to do with XML?

Does anyone have any ideas how I could permanently change the value?
I really need to get this problem sorted so any help you could provide would be much appreciated.
Avatar of JesterToo
JesterToo
Flag of United States of America image

Coule you please post the rest of your code?  I expect you're missing a step that actually saves the altered file.

Regards,
Lynn
Avatar of LFC1980
LFC1980

ASKER

Thanks Lynn,
I've pasted my java file below. It's in a self contained class with a main method so should run ok...
I've also pasted an example of the XML file I am using (called graphOne) just in case. It's quite long because the file is used to generate a diagram in the graphics program dia, but the main bits I'm interested in are nodes such as:

<dia:object type="Geometric - Perfect Circle" version="0" id="O1">
      <dia:attribute name="line_colour">
        <dia:color val="#000000"/>
      </dia:attribute>
      <dia:attribute name="fill_colour">
        <dia:color val="#ffffff"/>
      </dia:attribute>
 </dia:object>

Sorry about the dodgy formatting but cut and paste didn't work as smoothly as you would like :)

----------------------------------------------------------------------------------------------------------------------------------
import java.io.*

import org.w3c.dom.Document;
import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class testing2{

      public static void main (String argv []){
                try {
                //print out original file
            String sourceFile = "graphOne";
            String destinationFile = "testFile";
                BufferedReader in = new BufferedReader(new FileReader(sourceFile));
                String str;
                
            while ((str = in.readLine()) != null) {
                             System.out.println(str);
                }
                in.close();
                
                //copy orginal file to new temp file
                InputStream is = new FileInputStream(sourceFile);
                    OutputStream out = new FileOutputStream(destinationFile);
            
                 // Transfer bytes from in to out
                 byte[] buf = new byte[1024];
                 int len;
                 while ((len = is.read(buf)) > 0) {
                     out.write(buf, 0, len);
                 }
                 in.close();
                 out.close();
              
      System.out.println("--------Original file above --------------------------------------");
         
                
 
                //change colour value in destination file
                DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                  DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
                  Document doc = docBuilder.parse (new File(destinationFile));

                  // normalize text representation
      doc.getDocumentElement().normalize();
           
                NodeList colours = doc.getElementsByTagName("dia:color");
           
           
                  for(int i=0; i<colours.getLength(); i++){
           
                          //if the tag name of this element is called 'fill_colour' and the element ID matches modify its colour value
                          if((colours.item(i).getParentNode().getAttributes().getNamedItem("name").getNodeValue().equals("fill_colour")) &&
                              colours.item(i).getParentNode().getParentNode().getAttributes().getNamedItem("id").getNodeValue().toString().equals("O1")){
                        
                  //print old value
                              System.out.println("changing node "+ colours.item(i).getParentNode().getParentNode().getAttributes().getNamedItem("id").getNodeValue().toString()+"'s colour.");
                              System.out.println(colours.item(i).getAttributes().getNamedItem("val").getNodeValue().toString());
                              
                  //set new value
                  colours.item(i).getAttributes().getNamedItem("val").setNodeValue("#123456");
                              
                  //print out value that was just set
                  System.out.println(colours.item(i).getAttributes().getNamedItem("val").getNodeValue().toString());
                              
                              
                  }//if
           
            }//for
           
            //print out the destination file (testFile) and see wether the colour value for node with ID = "O1" equals #123456
            //When this runs the value is still reported to be #ffffff - which is the old value
                              BufferedReader in2 = new BufferedReader(new FileReader("testFile"));
                      String string;
              
                               while ((string = in2.readLine()) != null) {
                          System.out.println(string);
                      }
                     in.close();
         
        }catch (SAXParseException err) {
        System.out.println ("** Parsing error" + ", line " 
             + err.getLineNumber () + ", uri " + err.getSystemId ());
        System.out.println(" " + err.getMessage ());

        }catch (SAXException e) {
        Exception x = e.getException ();
        ((x == null) ? e : x).printStackTrace ();

        }catch (Throwable t) {
        t.printStackTrace ();
        }
        //System.exit (0);
    }//end of main

}//class

------------------------------------graphOne - XML file -----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
  <dia:diagramdata>
    <dia:attribute name="background">
      <dia:color val="#ffffff"/>
    </dia:attribute>
    <dia:attribute name="pagebreak">
      <dia:color val="#000099"/>
    </dia:attribute>
    <dia:attribute name="paper">
      <dia:composite type="paper">
        <dia:attribute name="name">
          <dia:string>#A4#</dia:string>
        </dia:attribute>
        <dia:attribute name="tmargin">
          <dia:real val="2.8222000598907471"/>
        </dia:attribute>
        <dia:attribute name="bmargin">
          <dia:real val="2.8222000598907471"/>
        </dia:attribute>
        <dia:attribute name="lmargin">
          <dia:real val="2.8222000598907471"/>
        </dia:attribute>
        <dia:attribute name="rmargin">
          <dia:real val="2.8222000598907471"/>
        </dia:attribute>
        <dia:attribute name="is_portrait">
          <dia:boolean val="true"/>
        </dia:attribute>
        <dia:attribute name="scaling">
          <dia:real val="0.37090817093849182"/>
        </dia:attribute>
        <dia:attribute name="fitto">
          <dia:boolean val="true"/>
        </dia:attribute>
        <dia:attribute name="fitwidth">
          <dia:int val="1"/>
        </dia:attribute>
        <dia:attribute name="fitheight">
          <dia:int val="1"/>
        </dia:attribute>
      </dia:composite>
    </dia:attribute>
    <dia:attribute name="grid">
      <dia:composite type="grid">
        <dia:attribute name="width_x">
          <dia:real val="1"/>
        </dia:attribute>
        <dia:attribute name="width_y">
          <dia:real val="1"/>
        </dia:attribute>
        <dia:attribute name="visible_x">
          <dia:int val="1"/>
        </dia:attribute>
        <dia:attribute name="visible_y">
          <dia:int val="1"/>
        </dia:attribute>
        <dia:composite type="color"/>
      </dia:composite>
    </dia:attribute>
    <dia:attribute name="color">
      <dia:color val="#d8e5e5"/>
    </dia:attribute>
    <dia:attribute name="guides">
      <dia:composite type="guides">
        <dia:attribute name="hguides"/>
        <dia:attribute name="vguides"/>
      </dia:composite>
    </dia:attribute>
  </dia:diagramdata>
  <dia:layer name="Background" visible="true">
    <dia:object type="Geometric - Perfect Circle" version="0" id="O0">
      <dia:attribute name="obj_pos">
        <dia:point val="14.564,17.95"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="14.514,17.9;21.714,25.1"/>
      </dia:attribute>
      <dia:attribute name="elem_corner">
        <dia:point val="14.564,17.95"/>
      </dia:attribute>
      <dia:attribute name="elem_width">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="elem_height">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="line_width">
        <dia:real val="0.10000000000000001"/>
      </dia:attribute>
      <dia:attribute name="line_colour">
        <dia:color val="#000000"/>
      </dia:attribute>
      <dia:attribute name="fill_colour">
        <dia:color val="#ffffff"/>
      </dia:attribute>
      <dia:attribute name="show_background">
        <dia:boolean val="true"/>
      </dia:attribute>
      <dia:attribute name="line_style">
        <dia:enum val="0"/>
        <dia:real val="1"/>
      </dia:attribute>
      <dia:attribute name="flip_horizontal">
        <dia:boolean val="false"/>
      </dia:attribute>
      <dia:attribute name="flip_vertical">
        <dia:boolean val="false"/>
      </dia:attribute>
    </dia:object>
    <dia:object type="Geometric - Perfect Circle" version="0" id="O1">
      <dia:attribute name="obj_pos">
        <dia:point val="34.364,17.95"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="34.314,17.9;41.514,25.1"/>
      </dia:attribute>
      <dia:attribute name="elem_corner">
        <dia:point val="34.364,17.95"/>
      </dia:attribute>
      <dia:attribute name="elem_width">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="elem_height">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="line_width">
        <dia:real val="0.10000000000000001"/>
      </dia:attribute>
      <dia:attribute name="line_colour">
        <dia:color val="#000000"/>
      </dia:attribute>
      <dia:attribute name="fill_colour">
        <dia:color val="#ffffff"/>
      </dia:attribute>
      <dia:attribute name="show_background">
        <dia:boolean val="true"/>
      </dia:attribute>
      <dia:attribute name="line_style">
        <dia:enum val="0"/>
        <dia:real val="1"/>
      </dia:attribute>
      <dia:attribute name="flip_horizontal">
        <dia:boolean val="false"/>
      </dia:attribute>
      <dia:attribute name="flip_vertical">
        <dia:boolean val="false"/>
      </dia:attribute>
    </dia:object>
    <dia:object type="Geometric - Perfect Circle" version="0" id="O2">
      <dia:attribute name="obj_pos">
        <dia:point val="48.764,18"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="48.714,17.95;55.914,25.15"/>
      </dia:attribute>
      <dia:attribute name="elem_corner">
        <dia:point val="48.764,18"/>
      </dia:attribute>
      <dia:attribute name="elem_width">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="elem_height">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="line_width">
        <dia:real val="0.10000000000000001"/>
      </dia:attribute>
      <dia:attribute name="line_colour">
        <dia:color val="#000000"/>
      </dia:attribute>
      <dia:attribute name="fill_colour">
        <dia:color val="#ffffff"/>
      </dia:attribute>
      <dia:attribute name="show_background">
        <dia:boolean val="true"/>
      </dia:attribute>
      <dia:attribute name="line_style">
        <dia:enum val="0"/>
        <dia:real val="1"/>
      </dia:attribute>
      <dia:attribute name="flip_horizontal">
        <dia:boolean val="false"/>
      </dia:attribute>
      <dia:attribute name="flip_vertical">
        <dia:boolean val="false"/>
      </dia:attribute>
    </dia:object>
    <dia:object type="Geometric - Perfect Circle" version="0" id="O3">
      <dia:attribute name="obj_pos">
        <dia:point val="20.6639,34.6"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="20.6139,34.55;27.8139,41.75"/>
      </dia:attribute>
      <dia:attribute name="elem_corner">
        <dia:point val="20.6639,34.6"/>
      </dia:attribute>
      <dia:attribute name="elem_width">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="elem_height">
        <dia:real val="7.0999999999999996"/>
      </dia:attribute>
      <dia:attribute name="line_width">
        <dia:real val="0.10000000000000001"/>
      </dia:attribute>
      <dia:attribute name="line_colour">
        <dia:color val="#000000"/>
      </dia:attribute>
      <dia:attribute name="fill_colour">
        <dia:color val="#ffffff"/>
      </dia:attribute>
      <dia:attribute name="show_background">
        <dia:boolean val="true"/>
      </dia:attribute>
      <dia:attribute name="line_style">
        <dia:enum val="0"/>
        <dia:real val="1"/>
      </dia:attribute>
      <dia:attribute name="flip_horizontal">
        <dia:boolean val="false"/>
      </dia:attribute>
      <dia:attribute name="flip_vertical">
        <dia:boolean val="false"/>
      </dia:attribute>
    </dia:object>
    <dia:object type="Standard - Line" version="0" id="O4">
      <dia:attribute name="obj_pos">
        <dia:point val="21.664,21.5"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="21.614,21;34.414,22"/>
      </dia:attribute>
      <dia:attribute name="conn_endpoints">
        <dia:point val="21.664,21.5"/>
        <dia:point val="34.364,21.5"/>
      </dia:attribute>
      <dia:attribute name="numcp">
        <dia:int val="1"/>
      </dia:attribute>
      <dia:attribute name="end_arrow">
        <dia:enum val="22"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_length">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_width">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:connections>
        <dia:connection handle="0" to="O0" connection="3"/>
        <dia:connection handle="1" to="O1" connection="2"/>
      </dia:connections>
    </dia:object>
    <dia:object type="Standard - Line" version="0" id="O5">
      <dia:attribute name="obj_pos">
        <dia:point val="41.464,21.5"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="41.4137,21.0497;48.8174,22.0503"/>
      </dia:attribute>
      <dia:attribute name="conn_endpoints">
        <dia:point val="41.464,21.5"/>
        <dia:point val="48.764,21.55"/>
      </dia:attribute>
      <dia:attribute name="numcp">
        <dia:int val="1"/>
      </dia:attribute>
      <dia:attribute name="end_arrow">
        <dia:enum val="22"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_length">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_width">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:connections>
        <dia:connection handle="0" to="O1" connection="3"/>
        <dia:connection handle="1" to="O2" connection="2"/>
      </dia:connections>
    </dia:object>
    <dia:object type="Standard - Arc" version="0" id="O6">
      <dia:attribute name="obj_pos">
        <dia:point val="52.314,25.1"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="37.8623,24.5498;52.3642,27.982"/>
      </dia:attribute>
      <dia:attribute name="conn_endpoints">
        <dia:point val="52.314,25.1"/>
        <dia:point val="37.914,25.05"/>
      </dia:attribute>
      <dia:attribute name="curve_distance">
        <dia:real val="-2.8569076099938755"/>
      </dia:attribute>
      <dia:attribute name="end_arrow">
        <dia:enum val="22"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_length">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_width">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:connections>
        <dia:connection handle="0" to="O2" connection="0"/>
        <dia:connection handle="1" to="O1" connection="0"/>
      </dia:connections>
    </dia:object>
    <dia:object type="Geometric - Perfect Circle" version="0" id="O7">
      <dia:attribute name="obj_pos">
        <dia:point val="41.0389,4.7"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="40.9889,4.65;48.4276,12.0887"/>
      </dia:attribute>
      <dia:attribute name="elem_corner">
        <dia:point val="41.0389,4.7"/>
      </dia:attribute>
      <dia:attribute name="elem_width">
        <dia:real val="7.3387054443359361"/>
      </dia:attribute>
      <dia:attribute name="elem_height">
        <dia:real val="7.3387054443359361"/>
      </dia:attribute>
      <dia:attribute name="line_width">
        <dia:real val="0.10000000000000001"/>
      </dia:attribute>
      <dia:attribute name="line_colour">
        <dia:color val="#000000"/>
      </dia:attribute>
      <dia:attribute name="fill_colour">
        <dia:color val="#ffffff"/>
      </dia:attribute>
      <dia:attribute name="show_background">
        <dia:boolean val="true"/>
      </dia:attribute>
      <dia:attribute name="line_style">
        <dia:enum val="0"/>
        <dia:real val="1"/>
      </dia:attribute>
      <dia:attribute name="flip_horizontal">
        <dia:boolean val="false"/>
      </dia:attribute>
      <dia:attribute name="flip_vertical">
        <dia:boolean val="false"/>
      </dia:attribute>
    </dia:object>
    <dia:object type="Standard - Line" version="0" id="O8">
      <dia:attribute name="obj_pos">
        <dia:point val="37.914,17.95"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="37.851,8.16677;41.5298,18.013"/>
      </dia:attribute>
      <dia:attribute name="conn_endpoints">
        <dia:point val="37.914,17.95"/>
        <dia:point val="41.0389,8.36935"/>
      </dia:attribute>
      <dia:attribute name="numcp">
        <dia:int val="1"/>
      </dia:attribute>
      <dia:attribute name="end_arrow">
        <dia:enum val="22"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_length">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_width">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:connections>
        <dia:connection handle="0" to="O1" connection="1"/>
        <dia:connection handle="1" to="O7" connection="2"/>
      </dia:connections>
    </dia:object>
    <dia:object type="Standard - Line" version="0" id="O9">
      <dia:attribute name="obj_pos">
        <dia:point val="48.3776,8.36935"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="48.3124,8.30415;52.7957,18.2355"/>
      </dia:attribute>
      <dia:attribute name="conn_endpoints">
        <dia:point val="48.3776,8.36935"/>
        <dia:point val="52.314,18"/>
      </dia:attribute>
      <dia:attribute name="numcp">
        <dia:int val="1"/>
      </dia:attribute>
      <dia:attribute name="end_arrow">
        <dia:enum val="22"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_length">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_width">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:connections>
        <dia:connection handle="0" to="O7" connection="3"/>
        <dia:connection handle="1" to="O2" connection="1"/>
      </dia:connections>
    </dia:object>
    <dia:object type="Standard - Line" version="0" id="O10">
      <dia:attribute name="obj_pos">
        <dia:point val="18.114,25.05"/>
      </dia:attribute>
      <dia:attribute name="obj_bb">
        <dia:rectangle val="18.0449,24.9809;24.6622,34.9113"/>
      </dia:attribute>
      <dia:attribute name="conn_endpoints">
        <dia:point val="18.114,25.05"/>
        <dia:point val="24.2139,34.6"/>
      </dia:attribute>
      <dia:attribute name="numcp">
        <dia:int val="1"/>
      </dia:attribute>
      <dia:attribute name="end_arrow">
        <dia:enum val="22"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_length">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:attribute name="end_arrow_width">
        <dia:real val="0.5"/>
      </dia:attribute>
      <dia:connections>
        <dia:connection handle="0" to="O0" connection="0"/>
        <dia:connection handle="1" to="O3" connection="1"/>
      </dia:connections>
    </dia:object>
  </dia:layer>
</dia:diagram>


ASKER CERTIFIED SOLUTION
Avatar of LFC1980
LFC1980

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Since you've apparently answered your own question (sorry I wasn't able to work on it... I've been "wound around the axle" interviewing for a new job!) you should post a request with Community Support Services to have your question closed and your points refunded.

You can do this through the "support" link in the blue bar at the very top of this page.

Regards,
Lynn
Avatar of LFC1980

ASKER

Will do. ..Thanks for the advice. Good luck with interview/new job
Thanks.