2011-09-26 82 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文件會更容易。