2010-03-02 43 views
0

看起來像我需要幫助了! : -/Java/Jsp XML Dom

我試着去閱讀與Java/JSP這個XML文件:

<?xml version="1.0" encoding="iso-8859-1" ?> 
<universal_campaign> 
    <campaign_details> 
     <campaign_id></campaign_id> 
     <campaign_title>Test Campaign</campaign_title> 
     <campaign_sdate>2010-01-21</campaign_sdate> 
     <campaign_edate>2010-01-25</campaign_edate> 
     <campaign_priority>Normal</campaign_priority> 
    </campaign_details> 

    <campaign_schedule> 
     <schedule_sdate>2010-01-25</schedule_sdate> 
     <schedule_edate>2010-01-30</schedule_edate> 
     <schedule_priority>Normal</schedule_priority> 

     <schedule_content> 
      <content_name>Wallpaper_A</content_name> 
      <content_filename>WP_A.jpg</content_filename> 
     </schedule_content> 

     <schedule_content> 
      <content_name>Screensaver</content_name> 
      <content_filename>SCS.gif</content_filename> 
     </schedule_content> 


     <schedule_zone>universal.001 test 001</schedule_zone> 
     <schedule_zone>universal.001 test 002</schedule_zone> 
     <schedule_zone>universal.001 test 003</schedule_zone> 
    </campaign_schedule> 

</universal_campaign> 

這裏是我的Java/JSP代碼:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(fileName); 
NodeList nl, nl2; 
NodeList campaign_details = doc.getElementsByTagName("universal_campaign"); 
String res = ""; 

for(int i = 0;i<campaign_details.getLength();i++){ 

    nl = campaign_details.item(i).getChildNodes(); 

    for(int j = 0; j<nl.getLength();j++){        
    nl2 = nl.item(j).getChildNodes(); 

     for(int k = 0; k<nl2.getLength();k++){ 
     res += nl2.item(k).getNodeName()+": "+nl2.item(k).getNodeValue()+"<br />"; 
     } 
    } 

} 

但是當我輸出字符串資源,我得到:

#text: 
campaign_id: null 
#text: 
campaign_title: null 
#text: 
campaign_sdate: null 
#text: 
campaign_edate: null 
#text: 
campaign_priority: null 
#text: 
#text: 
schedule_sdate: null 
#text: 
schedule_edate: null 
#text: 
schedule_priority: null 
#text: 
schedule_content: null 
#text: 
schedule_content: null 
#text: 
schedule_zone: null 
#text: 
schedule_zone: null 
#text: 
schedule_zone: null 
#text: 

而且我不明白這一點...的getNodeName()如何返回節點的名稱,但getNodeValue()返回null ....? 請幫助我,我已經做了很多的搜索和在這裏發帖之前失敗的嘗試,但是毫無效果....: -/

回答

2

事實是,你得到的節點不是文本節點本身。這是一個ElementgetNodeValue將返回空(見表here)。您必須改用getTextContent

+0

感謝它的工作!但我仍然在輸出中顯示「#text:」爲什麼? – Piero

+0

由於XML中的行返回。該空間被視爲文本節點,除空白字符外沒有任何內容。所以如果你知道你想要哪些元素,你最好只對這些元素進行過濾。 –

+0

非常感謝你的時間! – Piero

2

使用getTextContent(),或者甚至更好,使用更好的XML API(jdom泉記)。

+0

感謝它的工作!但我仍然在輸出中顯示「#text:」爲什麼? 我會檢查出jdom!感謝您的建議。 – Piero