Java XML Transformer仅输出XML头

Java XML Transformer仅输出XML头,java,xml,dom,Java,Xml,Dom,我正在做一个有趣的项目,将几个变量的内容输出到一个XML文件中。但是,当我放入程序时,转换器只输出第一行(XML头),而不输出其他内容。saveData()方法是在writeFile()之前调用的,在调用writeFile()之前,我已经将变量的值输出到控制台,所以我知道它们有一个值 代码如下: public class Output { private static double citySizeMiles; private static double citySizeA

我正在做一个有趣的项目,将几个变量的内容输出到一个XML文件中。但是,当我放入程序时,转换器只输出第一行(XML头),而不输出其他内容。saveData()方法是在writeFile()之前调用的,在调用writeFile()之前,我已经将变量的值输出到控制台,所以我知道它们有一个值

代码如下:

public class Output {   
    private static double citySizeMiles;
    private static double citySizeAcres;
    private CityType type;
    private static int gpLimit;
    private static long totalWealth;
    private static long cityPopulation;

    public static void saveData() {
        cityPopulation = CityGenerator.cityPop;
        citySizeMiles = City.getCitySizeMiles(cityPopulation);
        citySizeAcres = City.getCitySizeAcres(cityPopulation);
        gpLimit = City.getGoldLimit();
        totalWealth = CityGenerator.cityWealth;
    }

    public static void writefile() {
        try {           
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = docFactory.newDocumentBuilder();

            // Root Elements
            Document doc = builder.newDocument();
            Element root = doc.createElement("data");

            // Data Element
            Element data = doc.createElement("City");
            root.appendChild(data);

            Attr attr = doc.createAttribute("name");
            attr.setValue("Test");
            data.setAttributeNode(attr);

            // City size (sq miles)
            Element sizeMi = doc.createElement("sizeMiles");
            sizeMi.appendChild(doc.createTextNode(String.valueOf(citySizeMiles)));
            data.appendChild(sizeMi);

            // City size (acres)
            Element sizeAc = doc.createElement("sizeAcres");
            sizeAc.appendChild(doc.createTextNode(String.valueOf(citySizeAcres)));
            data.appendChild(sizeAc);

            // Population
            Element pop = doc.createElement("population");
            pop.appendChild(doc.createTextNode(String.valueOf(cityPopulation)));
            data.appendChild(pop);

            // GP limit
            Element gpLim = doc.createElement("gpLimit");
            gpLim.appendChild(doc.createTextNode(String.valueOf(gpLimit)));
            data.appendChild(gpLim);

            // Total fluid wealth
            Element wealth = doc.createElement("totalWealth");
            wealth.appendChild(doc.createTextNode(String.valueOf(totalWealth)));
            data.appendChild(wealth);

            // Write to XML file
            TransformerFactory tf = TransformerFactory.newInstance();
            tf.setAttribute("indent-number", 4);

            Transformer trans = tf.newTransformer();
            trans.setOutputProperty(OutputKeys.INDENT, "yes");
            trans.setOutputProperty(OutputKeys.METHOD, "xml");

            DOMSource source = new DOMSource(doc);
            //StreamResult result = new StreamResult(new File("D:\\test.xml"));

            StreamResult result = new StreamResult(System.out);

            trans.transform(source, result);

        } catch(ParserConfigurationException pce) {
            pce.printStackTrace();
        } catch(TransformerException tfe) {
            tfe.printStackTrace();
        }
    }
}

我不是DOM方面的专家(我像瘟疫一样避免DOM,并鼓励其他人也这样做),但我认为您未能将根元素连接到文档节点

我也是DOM的新手(不知道还有其他选择)。关于这个替代方案,您有什么建议吗,比如指向更多信息的链接,或者关于我如何无法将根元素连接到此文档节点的解释?我首选的树模型是JDOM和XOM。它们比DOM简单得多,更面向Java,并且在设计时对XML有了更好的理解(DOM最初是HTML,名称空间是后来才想到的)。但我真正的偏好是根本不在Java中处理XML:XSLT和XQuery做得更好。至于细节,就像您完成root.apppendChild(数据)一样,您需要将根元素连接到文档节点。这是一个简单的修复!哦,好吧,我更喜欢只需要一行代码,而不是几个小时就可以把东西拆开的修复程序。非常感谢,先生!