[jdom-interest] Bug in CDATA reading/writing?
Mark Roder
roder at is.com
Wed Mar 14 13:00:51 PST 2001
I am using JDOM-B6.
I am noticing if I read a file, write a file and then read it back in again,
I get different data the second time I read it when the file contains CDATA.
This seems weird to me. Is this a bug in the code or something that should
be documented some more? It was surprising to me.
The XML file:
<?xml version="1.0" encoding="iso-8859-1"?>
<RootElement>
<ValueOne>This is ValueOne</ValueOne>
<ValueTwo><![CDATA[This is ValueTwo]]></ValueTwo>
</RootElement>
The Code: //Change the XMLOutputter used to show the issue.
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.io.*;
public class DataReader
{
public static void main(String args[])
{
try
{
//Read one time
SAXBuilder aBuilderR1 = new SAXBuilder();
Document aDocR1 = aBuilderR1.build(new File("Sample.xml"));
Element rootElementR1 = aDocR1.getRootElement();
Element valueOneR1 = rootElementR1.getChild("ValueOne");
Element valueTwoR1 = rootElementR1.getChild("ValueTwo");
System.out.println("Start");
System.out.println("R1V1 - getText: " + valueOneR1.getText());
System.out.println("R1V1 - getTextTrim: " +
valueOneR1.getTextTrim());
System.out.println("R1V2 - getText: " + valueTwoR1.getText());
System.out.println("R1V2 - getTextTrim: " +
valueTwoR1.getTextTrim());
System.out.println("Done");
//Breaks things on next line
//XMLOutputter xmlOut = new XMLOutputter("",true);
//XMLOutputter xmlOut = new XMLOutputter(" ",true);
//Breaks adds the spaces to the front
//XMLOutputter xmlOut = new XMLOutputter(" ");
//XMLOutputter xmlOut = new XMLOutputter(" ",false);
//Works
//XMLOutputter xmlOut = new XMLOutputter("");
//XMLOutputter xmlOut = new XMLOutputter("",false);
XMLOutputter xmlOut = new XMLOutputter();
FileWriter aWriter = new FileWriter("Sample2.xml");
xmlOut.output(aDocR1,aWriter);
aWriter.close();
SAXBuilder aBuilderR2 = new SAXBuilder();
Document aDocR2 = aBuilderR2.build(new File("Sample2.xml"));
Element rootElementR2 = aDocR2.getRootElement();
Element valueOneR2 = rootElementR2.getChild("ValueOne");
Element valueTwoR2 = rootElementR2.getChild("ValueTwo");
System.out.println("Start");
System.out.println("R2V1 - getText: " + valueOneR2.getText());
System.out.println("R2V1 - getTextTrim: " +
valueOneR2.getTextTrim());
System.out.println("R2V2 - getText: " + valueTwoR2.getText());
System.out.println("R2V2 - getTextTrim: " +
valueTwoR2.getTextTrim());
System.out.println("Done");
}
catch(Exception e)
{
System.out.println("Exception is " + e);
}
}
}
Example Error Output:
Start
R1V1 - getText: This is ValueOne
R1V1 - getTextTrim: This is ValueOne
R1V2 - getText: This is ValueTwo
R1V2 - getTextTrim: This is ValueTwo
Done
Start
R2V1 - getText: This is ValueOne
R2V1 - getTextTrim: This is ValueOne
R2V2 - getText:
This is ValueTwo
R2V2 - getTextTrim: This is ValueTwo
Done
More information about the jdom-interest
mailing list