0

所以我有以下代码,我想在其中创建一个 XML 文件并将其存储在本地计算机上,但是每当我执行代码时,它似乎并没有保存文件,有人可以帮我吗?

public void CreateXMLPoll (Poll p) {

        try {
            // Initialize the XML builder
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder;
            docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();

            // Set the Elements Up
            Element rootElement = doc.createElement("Poll");
            Element creator = doc.createElement("Creator");
            Element name = doc.createElement("Name");
            Element email = doc.createElement("Email");
            Element title = doc.createElement("Title");
            Element location = doc.createElement("Location");
            Element description = doc.createElement("Description");
            Element date = doc.createElement("Date");
            Element time = doc.createElement("Time");

            // Create XML tree
            rootElement.appendChild(creator);
            rootElement.appendChild(title);
            rootElement.appendChild(location);
            rootElement.appendChild(description);
            rootElement.appendChild(date);
            creator.appendChild(name);
            creator.appendChild(email);
            date.appendChild(time);

            // Add values to XML
            name.appendChild(doc.createTextNode(p.getUsername()));
            email.appendChild(doc.createTextNode(p.getEmail()));
            title.appendChild(doc.createTextNode(p.getTitle()));
            location.appendChild(doc.createTextNode(p.getLocation()));
            description.appendChild(doc.createTextNode(p.getDescription()));

            // Appends a bunch of dates
            for (PollDates pd : p.getDates()) {
                time.appendChild(doc.createTextNode(pd.getFirst().toString()));
                if (pd.getSecond() != null) time.appendChild(doc.createTextNode(pd.getSecond().toString()));
                if (pd.getThird() != null) time.appendChild(doc.createTextNode(pd.getThird().toString()));
            }

            // write the content into xml file
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            try {
                Transformer transformer = transformerFactory.newTransformer();
            } catch (TransformerConfigurationException e) {
                e.printStackTrace();
            }
            FileWriter fstream = new FileWriter("test.xml");
            BufferedWriter out = new BufferedWriter(fstream);

            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("C:/Users/testing.xml"));

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

我按照这里的教程进行操作。

4

2 回答 2

3

在这条线之后,

BufferedWriter out = new BufferedWriter(fstream);

您需要声明为:

out.write("content to write in the file");

写入文件。

要获取内容,您在教程中错过了这个:

StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();

获得 后xmlString,使用以下命令写入文件:

out.write(xmlString,0, xmlString.length);

完成后,您需要添加,

out.close();

关闭流。

更新程序并尝试。

于 2012-10-12T05:13:39.553 回答
2

我会推荐你​​使用 JAXB

使用 JAXB,您可以:

  • 从 XML 模式生成 JAXB Java 类
  • 使用模式派生的 JAXB 类在 Java 应用程序中解组和编组 XML 内容
  • 使用模式派生的 JAXB 类创建 Java 内容树
  • 在解组期间和运行时验证 XML 内容
  • 自定义 JAXB 模式到 Java 的绑定

检查这个例子

http://www.vogella.com/articles/JAXB/article.html

http://www.mkyong.com/java/jaxb-hello-world-example/

它是更简单、可修改的代码、面向对象的方法。

于 2012-10-12T06:00:30.767 回答