【问题标题】:Java/Jsp XML DomJava/Jsp XML DOM
【发布时间】:2011-01-22 16:39:01
【问题描述】:

看来我又需要帮助了! :-/

我正在尝试用 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 />";
      }
   }

}

但是当我输出字符串 res 时,我得到:

#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 ....? 请帮帮我,在发帖之前我已经做了很多搜索,但都失败了,但没有任何效果.... :-/

【问题讨论】:

    标签: java xml jsp dom


    【解决方案1】:

    事实是你得到的节点不是文本节点本身。这是一个ElementgetNodeValue 将返回空值(见表here)。您必须改用getTextContent

    【讨论】:

    • 感谢它的工作!但我的输出中仍然出现“#text:”...为什么?
    • 因为该行在您的 XML 中返回。该空间被视为一个文本节点,其中除了空白字符之外没有任何内容。所以如果你知道你想要哪些元素,你最好只过滤这些元素。
    【解决方案2】:

    使用getTextContent(),或者更好的是,使用更好的XML API(想到jdom)。

    【讨论】:

    • 谢谢它的工作!但是我的输出中仍然出现“#text:”...为什么?我会检查jdom了!感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2012-01-10
    • 2012-07-07
    • 2021-10-18
    • 2013-01-22
    • 1970-01-01
    • 2011-12-15
    • 2017-10-05
    相关资源
    最近更新 更多