2010-10-20 40 views
0

昨天我問了一個問題here,並且很友好地回答。但是,我已經拿到了示例代碼並嘗試打印出當前節點的值,即使用getNodeValue。將getNodeValue轉換爲字符串

每當我運行jsp時,它會在「printOut = n.getNodeValue()。trim();」時返回一個「org.apache.jasper.JasperException:處理JSP頁面時發生異常」

下面是我從羅布麻

String = "tagToFind"; 
String printOut = ""; 
Node n = aNode.getParentNode(); 
while (n != null && !n.getNodeName().equals(tagToFind)) { 
n = n.getParentNode(); 
printOut = n.getNodeValue(); 
} 
out.println(printOut); 

回答

1

這可能是getNodeValue被返回null,導致.trim()部分拋出NullPointerException編輯代碼。

getNodeValue對除文本,屬性,註釋,處理指令和CDATA之外的所有節點類型返回null。請注意,元素和文檔爲getNodeValue返回null。你正在走節點樹,所以你很快就會碰到其中一個。

您可以通過在試圖修剪之前檢查空值來解決此問題。

+0

謝謝你,這是一個很好的提示,但我想,如果添加(N!= NULL){printOut的= n.getNodeValue()修剪();}但我仍然得到相同的錯誤 – Hammer 2010-10-20 11:14:04

+1

問題不在於n == null,而是n.getNodeValue()== null。嘗試測試。 – 2010-10-20 12:10:10

0

除了@卡梅隆的答案,你應該知道你的循環邏輯的缺陷。

您首先將n更改爲指向父級,然後使用getNodeValue()就可以了。

但是n可能已從.getParentNode()調用中變爲null。

嘗試更換他們..

printOut = n.getNodeValue(); 
n = n.getParentNode(); 
+0

這個想法是打印出「tagToFind」的值......在當前節點前應該是1,因此它需要在'getParentNode'之後。否則,它總會在「tagToFind」後面打印節點,這是我之前的節點之前的節點。那有意義嗎? – Hammer 2010-10-20 11:21:03

+0

@Hammer'printOut = ..'甚至不應該在循環中。進入循環的條件是n不爲空,並且n不是你想要的標記。一旦n變爲空或指向你想要的標籤,它將跳過循環。因此代碼在它可以使用n(null或tagToFin)並且打印它的內容之後。 – 2010-10-20 11:59:10