2010-03-02 41 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