I retrieved my needful data from XML tags. I used relative packages in this regard. Now I want to save the result in a.txt file but I don't know how to use FileWriter in my code? I tried several times but I got a blank text file without the printed result in the console. Anyone can help me in saving the result in txt?
package XMLConvertor;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
public class Sample {
public static void main(String argv[]) {
try {
//SourceFile
File fXmlFile = new File("~/Downloads/Teacher.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
//normalizing doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
//Teacher name tags
NodeList nList = doc.getElementsByTagName("TeacherName");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Name: " + eElement.getElementsByTagName("Name").item(0).getTextContent());
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
The result share as below: This is just a dummy test as i have done. I wonder how to save it in a text file?
TeacherName
--------------------------------
Sara
Marry
John
You made this like here
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:\\file.xml"));
// Output to console for testing
// StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
More you can find on: https://mkyong.com/java/how-to-create-xml-file-in-java-dom/
As alternative you can use the transform method to pass it into StringWriter. the you can made this because you have an string
StringWriter sw = new StrinWriter();
transformer.transform(source, new StreamResult(sw));
FileWriter fw = new FileWriter("file.txt")
fw.write(sw.toString();
fw.close()
Here you are:
package XMLConvertor;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult
public class Sample {
public static void main(String argv[]) {
try {
//SourceFile
File fXmlFile = new File("~/Downloads/Teacher.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("~/Downloads/file.xml"));
// Output to console for testing
// StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
//Teacher name tags
NodeList nList = doc.getElementsByTagName("TeacherName");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Name: " + eElement.getElementsByTagName("Name").item(0).getTextContent());
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Here the code with absolute path:
File fXmlFile = new File("/home/user/Downloads/Teacher.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("/home/user/Downloads/file.xml"));
transformer.transform(source, result);
And here we replace the "~":
File fXmlFile = new File("~/Downloads/file.xml".replaceFirst("^~", System.getProperty("user.home")));
DocumentBuilderFactory dbFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("~/Downloads/file.xml".replaceFirst("^~", System.getProperty("user.home"))));
transformer.transform(source, result);
Ok, based on you answer i have this code for you, i have been used a Strin builder to store the output and write them with an FileWriter to an txt file
public static void main(String[] args)
{
try
{
File fXmlFile = new File("~/Downloads/Teacher.xml".replaceFirst("^~", System.getProperty("user.home")));
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
//Teacher name tags
StringBuilder result = new StringBuilder(doc.getDocumentElement().getNodeName() + "\n----------------------------\n");
NodeList nList = doc.getElementsByTagName("TeacherName");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++)
{
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE)
{
Element eElement = (Element) nNode;
System.out.println("Name: " + eElement.getElementsByTagName("Name").item(0).getTextContent());
result.append(String.format("%s\n", eElement.getElementsByTagName("Name").item(0).getTextContent()));
}
}
FileWriter writer = new FileWriter(new File("~/Downloads/file.xml".replaceFirst("^~", System.getProperty("user.home"))));
writer.write(result.toString());
writer.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
I've tested thic code and it runs:)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.