D
Dr. Laurence Leff
I am writing a Java program to read in XML file, modify some elements
slightly, and then write it out. That XML file is prepared
in Docbook.
It works fine, except that it is disturbing the carriage returns in places
where they have meaning.
Attached are a sample input file, the sample output file, and a simplified
version of my Java program. My real file, examines certain element's attributes
and adds certain elements to the DOM data structure.
How, best to write such a program, without disturbing the carriage returns
between "<programlisting>" and "</programlisting>"
Here is the input file. I need to preserve the formatting of the material
between "<programlisting>" and "</programlisting>"
<test>
<programlisting>
a
b
c d e f
</programlisting>
</test>
Here is the output file -- observe how the "a b c d e f" are now on
one line.
<?xml version="1.0" encoding="UTF-8"?>
<test>
<programlisting> a b c d e f </programlisting>
</test>
Here is the Java program:
import java.text.*;
import java.io.*;
import javax.xml.parsers.*;
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class Test {
static PrintWriter debug = null;
static Document document = null;
static String OutputFileName;
static Element CreateElement (String ElementName, String Contents){
Element ToReturn;
ToReturn = document.createElement(ElementName);
Text T = document.createTextNode(Contents);
ToReturn.appendChild(T);
return ToReturn;
}
static Element CreateElement (String ElementName, String Contents, String AttributeName, String AttributeValue){
Element ToReturn = CreateElement(ElementName,Contents);
ToReturn.setAttribute(AttributeName,AttributeValue);
return ToReturn;
}
public static void main (String[] args) throws FileNotFoundException {
try {
debug = new PrintWriter (new FileWriter("debug.out"));
}
catch (Exception d) {System.out.println("cannot open debug file");}
Text T;
int j;
DocumentBuilder parser = null;
// Here we read in the data from the XML file
DocumentBuilderFactory Factory = DocumentBuilderFactory.newInstance();
String xmlFile = args[0];
File file = new File (xmlFile);
try {
parser = Factory.newDocumentBuilder();
}
catch (ParserConfigurationException pce) {
System.out.println ("Parser Configuration Exception " + pce.getMessage());
System.exit(0);
}
try {
document = parser.parse(file);
}
catch (SAXException se) {
System.out.println ("SAX Exception on parsing document " + se.getMessage());
System.exit(0);
}
catch (IOException ioe) {
System.out.println ("IO Exception on parsing document " + ioe.getMessage());
System.exit(0);
}
FileWriter out = null;
XMLSerializer X = null;
Element root = null;
OutputFileName=args[0];
try {
out = new FileWriter(OutputFileName+".OUT"+".xml");
out.flush();
OutputFormat o = new OutputFormat(document);
o.setIndent(5);
o.setIndenting(true);
X = new XMLSerializer(o);
X.setOutputCharStream(out);
}
catch (IOException e0) {
System.out.println ("problem in setting up to save XML file" + e0.getMessage());
e0.printStackTrace();
}
// use the XML functions to dump the materials
try {
X.serialize(document);
out.flush();
} catch (IOException e2) {System.out.println("error writing file " + e2.getMessage());e2.printStackTrace();}
debug.close();
}
}
Dr. Laurence Leff Western Illinois University, Macomb IL 61455 ||(309) 298-1315
Stipes 447 Assoc. Prof. of Computer Sci. Pager: 309-367-0787 FAX: 309-298-2302
Secretary: eContracts Technical Committee OASIS Legal XML Member Section
slightly, and then write it out. That XML file is prepared
in Docbook.
It works fine, except that it is disturbing the carriage returns in places
where they have meaning.
Attached are a sample input file, the sample output file, and a simplified
version of my Java program. My real file, examines certain element's attributes
and adds certain elements to the DOM data structure.
How, best to write such a program, without disturbing the carriage returns
between "<programlisting>" and "</programlisting>"
Here is the input file. I need to preserve the formatting of the material
between "<programlisting>" and "</programlisting>"
<test>
<programlisting>
a
b
c d e f
</programlisting>
</test>
Here is the output file -- observe how the "a b c d e f" are now on
one line.
<?xml version="1.0" encoding="UTF-8"?>
<test>
<programlisting> a b c d e f </programlisting>
</test>
Here is the Java program:
import java.text.*;
import java.io.*;
import javax.xml.parsers.*;
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class Test {
static PrintWriter debug = null;
static Document document = null;
static String OutputFileName;
static Element CreateElement (String ElementName, String Contents){
Element ToReturn;
ToReturn = document.createElement(ElementName);
Text T = document.createTextNode(Contents);
ToReturn.appendChild(T);
return ToReturn;
}
static Element CreateElement (String ElementName, String Contents, String AttributeName, String AttributeValue){
Element ToReturn = CreateElement(ElementName,Contents);
ToReturn.setAttribute(AttributeName,AttributeValue);
return ToReturn;
}
public static void main (String[] args) throws FileNotFoundException {
try {
debug = new PrintWriter (new FileWriter("debug.out"));
}
catch (Exception d) {System.out.println("cannot open debug file");}
Text T;
int j;
DocumentBuilder parser = null;
// Here we read in the data from the XML file
DocumentBuilderFactory Factory = DocumentBuilderFactory.newInstance();
String xmlFile = args[0];
File file = new File (xmlFile);
try {
parser = Factory.newDocumentBuilder();
}
catch (ParserConfigurationException pce) {
System.out.println ("Parser Configuration Exception " + pce.getMessage());
System.exit(0);
}
try {
document = parser.parse(file);
}
catch (SAXException se) {
System.out.println ("SAX Exception on parsing document " + se.getMessage());
System.exit(0);
}
catch (IOException ioe) {
System.out.println ("IO Exception on parsing document " + ioe.getMessage());
System.exit(0);
}
FileWriter out = null;
XMLSerializer X = null;
Element root = null;
OutputFileName=args[0];
try {
out = new FileWriter(OutputFileName+".OUT"+".xml");
out.flush();
OutputFormat o = new OutputFormat(document);
o.setIndent(5);
o.setIndenting(true);
X = new XMLSerializer(o);
X.setOutputCharStream(out);
}
catch (IOException e0) {
System.out.println ("problem in setting up to save XML file" + e0.getMessage());
e0.printStackTrace();
}
// use the XML functions to dump the materials
try {
X.serialize(document);
out.flush();
} catch (IOException e2) {System.out.println("error writing file " + e2.getMessage());e2.printStackTrace();}
debug.close();
}
}
Dr. Laurence Leff Western Illinois University, Macomb IL 61455 ||(309) 298-1315
Stipes 447 Assoc. Prof. of Computer Sci. Pager: 309-367-0787 FAX: 309-298-2302
Secretary: eContracts Technical Committee OASIS Legal XML Member Section