Java XML Transformer仅输出XML头
我正在做一个有趣的项目,将几个变量的内容输出到一个XML文件中。但是,当我放入程序时,转换器只输出第一行(XML头),而不输出其他内容。saveData()方法是在writeFile()之前调用的,在调用writeFile()之前,我已经将变量的值输出到控制台,所以我知道它们有一个值 代码如下: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
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(数据)一样,您需要将根元素连接到文档节点。这是一个简单的修复!哦,好吧,我更喜欢只需要一行代码,而不是几个小时就可以把东西拆开的修复程序。非常感谢,先生!