Java XML转换器
我一直在尝试创建一个XML文档,但不断出现空指针异常错误,我花了几个小时试图找出原因 路径是正确的,因为它在读取文件时起作用 主要内容: WriteConfig:Java XML转换器,java,xml,transformer,Java,Xml,Transformer,我一直在尝试创建一个XML文档,但不断出现空指针异常错误,我花了几个小时试图找出原因 路径是正确的,因为它在读取文件时起作用 主要内容: WriteConfig: import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.trans
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
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;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class WriteConfig {
Document dom;
Element e = null;
String name;
String gender;
String race;
String cclass;
public WriteConfig(String xml) {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
dom = docBuilder.newDocument();
Element mainRootElement = dom.createElement("character");
e = dom.createElement("name");
e.appendChild(dom.createTextNode(name));
mainRootElement.appendChild(e);
e = dom.createElement("gender");
e.appendChild(dom.createTextNode(gender));
mainRootElement.appendChild(e);
e = dom.createElement("race");
e.appendChild(dom.createTextNode(race));
mainRootElement.appendChild(e);
dom.appendChild(mainRootElement);
try {
Transformer tr = TransformerFactory.newInstance().newTransformer();
tr.setOutputProperty(OutputKeys.INDENT, "yes");
tr.setOutputProperty(OutputKeys.METHOD, "xml");
tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tr.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "res/config.dtd");
tr.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
DOMSource dSource = new DOMSource(dom);
StreamResult sResult = new StreamResult(xml);
tr.transform(dSource, sResult);
} catch (TransformerException te) {
te.printStackTrace();
}
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
}
}
}
错误:
ERROR: ''
javax.xml.transform.TransformerException: java.lang.NullPointerException
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:752)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:357)
at bamberger.com.engine.WriteConfig.<init>(WriteConfig.java:64)
at bamberger.com.engine.Main.main(Main.java:13)
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToStream.characters(ToStream.java:1612)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:244)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:136)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:98)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:699)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:743)
... 3 more
---------
java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToStream.characters(ToStream.java:1612)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:244)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:136)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:98)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:699)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:743)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:357)
at bamberger.com.engine.WriteConfig.<init>(WriteConfig.java:64)
at bamberger.com.engine.Main.main(Main.java:13)
谢谢 您从未初始化
字符串名称在尝试将其用于e.appendChild(dom.createTextNode(name))之前,请在WriteConfig
中选择code>代码>。初始化name
变量以修复错误
String name;
String gender;
String race;
String cclass;
必须先初始化变量,然后才能使用它
//Decarle variable
String name;
String gender;
String race;
String cclass;
//Initialize and set value
name = "EwokHugz";
gender = "female";
race = "10";
cclass = "XML Programming";
花了几个小时=>而您没有使用调试器来查看空值在哪里?我认为你只是在浪费时间:在构造函数中实现处理是一种糟糕的风格。此外,如果您谈论异常,请显示异常并映射行号。在您的示例代码中,所有字符串都为空。请检查:如果这没有帮助,请发布错误。这将使代码中的问题更容易区分我知道NullPointerException是什么,但我仍然无法找出这段代码的错误。我贴出了错误信息,头撞在键盘上。非常感谢你。我不敢相信我错过了。我计划在代码运行后通过另一种方法获取这些字符串,但我忘记了初始化它们。我们都在那里:P下次,使用System.out.println(name)
检查变量是否为空。任何不是基元的变量都可以为null
String name;
String gender;
String race;
String cclass;
//Decarle variable
String name;
String gender;
String race;
String cclass;
//Initialize and set value
name = "EwokHugz";
gender = "female";
race = "10";
cclass = "XML Programming";