2011-09-26 65 views
0

我正在尝试构建将xml文件发送到客户端的服务器。我从数据库获取信息,并希望从该XML文件构建。creat simple xml

,但我有一个问题:

DocumentBuilder documentBuilder = null; 
Document doc =documentBuilder.newDocument(); 

我得到NullPointerException异常。下面是我完整的代码:

public void createXmlTree() throws Exception { 
    //This method creates an element node 
    DocumentBuilder documentBuilder = null; 
    Document doc =documentBuilder.newDocument(); 

    Element root = doc.createElement("items"); 
    //adding a node after the last child node of the specified node. 

    doc.appendChild(root); 
    for(int i=0;i<db.stories.size();i++){ 
    Element child = doc.createElement("item"); 
    root.appendChild(child); 

    Element child1 = doc.createElement("title"); 
    child.appendChild(child1); 

    Text text = doc.createTextNode(db.stories.get(i).title); 
    child1.appendChild(text); 

    //Comment comment = doc.createComment("Employee in roseindia"); 
    //child.appendChild(comment); 

    Element child2 = doc.createElement("date"); 
    child.appendChild(child2); 

    Text text2 = doc.createTextNode(db.stories.get(i).date); 
    child2.appendChild(text2); 

    Element child3 = doc.createElement("text"); 
    child.appendChild(child3); 

    Text text3 = doc.createTextNode(db.stories.get(i).text); 
    child3.appendChild(text3); 

    root.appendChild(child3); 
+0

嗯,创建(2)... – Yuji

回答

2

嗯,是的,你会得到一个NullPointerException。您正在调用空引用的方法 - 非常清楚,因为您之前已将documentBuilder指定为空值。您需要先获得DocumentBuilder的实例。例如:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = factory.newDocumentBuilder(); 
+0

如果我会这样做我得到的符号:方法createElement(java.lang.String)位置:doc.appendChild上的类型为javax.xml.parsers.DocumentBuil的变量doc根); –

+0

那么,这表明你有一个名为'doc'的DocumentBuilder类型的变量 - 在调用'documentBuilder.newDocument'之后,我希望'doc'是一个'Document'变量。您仍然需要进行该调用 - 我的代码只是向您展示了如何获得一个DocumentBuilder。 –

1

当然你得到一个NullPointerException,你的DocumentBuilder为null。 尝试先实例化它。

// Step 1: create a DocumentBuilderFactory 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

    // Step 2: create a DocumentBuilder 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
+0

如果我会这样做,我得到的符号:方法createElement(java.lang.String) 位置:doc.appendChild(根)上的javax.xml.parsers.DocumentBuilde类型的变量doc; –

1

伙计们对DocumentBuilder是正确的。但我可以为您提供其他解决方案吗?你的servlet主要处理XML本身的生成,即生成一种标记。这是JSP的目的。您可以实现简单的JSP页面,该页面实际上将包含您的XML模板和一些插入动态数据的代码。这更简单,更容易维护。

是的,JSP通常会生成HTML,但没有人说他们不能生成XML或任何其他文本格式。请不要忘记将内容类型设置为text/xml

1

你真的需要手动编写XML吗? 你有你想写的XML的XSD吗?

因为使用XJC/JAXB生成一些类并使用编组来编写XML文件会更容易。