2011-08-04 138 views
1

根元素的屬性讓我們考慮這個XML文件:爲什麼我不能使用JDOM

<?xml version="1.0" encoding="UTF-8"?> 
<root attribute="value"> 
    <element>myElement</element> 
</root> 

我想用JDOM提取從根屬性名稱和值來解析文件元件。

這是代碼我瘋了這個目的:

public static org.jdom.Document document; 
public static org.jdom.Element root; 

SAXBuilder sxb = new SAXBuilder(); 
try 
{ 
    document = sxb.build(new File("file.xml")); 
    root = document.getRootElement(); 

    List myList = root.getAttributes(); 
    Iterator x = myList.iterator(); 
    while(x.hasNext()) 
    { 
     Attribute myAttribute = (Attribute)x.next(); 
     System.out.println("name : " + myAttribute.getName() + " & value : " + myAttribute.getValue()); 
    } 
} 
catch(Exception e){ 
    e.printStackTrace(); 
} 

一切正常,這個XML文件。但是,當我使用這個文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE rootElement PUBLIC "-//Project" "mydtd.dtd"> 
<root attribute="value"> 
    <element>myElement</element> 
</root> 

我得到Exception in thread "main" java.lang.NullPointerException

你覺得我應該刪除從XML文件的DOCTYPE解析它之前和過去之後我完成了解析。

或者在這種情況下我還能做些什麼嗎?

感謝

+0

什麼是行會導致這個空指針異常? –

+0

哪裏拋出異常?請提供堆棧跟蹤並標記引發異常的行。 – AlexR

+0

root = document.getRootElement(); –

回答

4

還是有別的東西,我可以在這種情況下怎麼辦?

是 - 永遠,永遠做到這一點:

catch(Exception e){} 

這不是JDOM或屬性的問題,這是你的一般的異常處理的一個問題。

很可能您得到NullPointerException,因爲XML文件沒有正確解析,所以document字段爲null。但是因爲你發現並忽略了這個異常,所以你沒有得到有意義的錯誤信息。

將您目前擁有的所有代碼移動到之後的try/catch塊內的catch塊中,您將獲得更有用的錯誤報告。

+0

我不是在討論管理異常。 –

+0

@OpenMind:是的,我知道,但你應該這樣做,因爲那是導致你的錯誤的原因('NullPointerException')。你可能認爲這裏的異常處理是無關緊要的,但事實並非如此。 – skaffman

+0

你有什麼建議? –

相關問題