Сохранить XML файл в TXT в java - PullRequest
0 голосов
/ 09 мая 2020

Я получил необходимые данные из тегов XML. В этом отношении я использовал относительные пакеты. Теперь я хочу сохранить результат в файле .txt, но не знаю, как использовать FileWriter в моем коде? Я пробовал несколько раз, но получил пустой текстовый файл без вывода результатов в консоли. Кто-нибудь может помочь мне сохранить результат в 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);

// нормализация do c .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();
    }
  }

}

Ответы [ 5 ]

1 голос
/ 10 мая 2020

Результат показан ниже: Это всего лишь фиктивный тест, как и я. Интересно, как сохранить в текстовом файле?

TeacherName 
--------------------------------
Sara 
Marry
John
0 голосов
/ 10 мая 2020

Хорошо, на основе вашего ответа у меня есть этот код для вас, я использовал конструктор Strin для хранения вывода и записи их с помощью FileWriter в текстовый файл

 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();
    }
}

Я тестировал этот c код, и он запускается:)

0 голосов
/ 09 мая 2020

Вот вы:

    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();
        }
      }

    }
0 голосов
/ 09 мая 2020

Вот код с абсолютным путем:

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);

А здесь заменяем «~»:

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);
0 голосов
/ 09 мая 2020

Вы сделали это, как здесь

// 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);

Больше вы можете найти на: https://mkyong.com/java/how-to-create-xml-file-in-java-dom/

В качестве альтернативы вы можете использовать метод преобразования, чтобы передать его в StringWriter. вы можете сделать это, потому что у вас есть строка

StringWriter sw = new StrinWriter();
transformer.transform(source, new StreamResult(sw));
FileWriter fw = new FileWriter("file.txt")
fw.write(sw.toString();
fw.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...