新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 计算机科学论坛XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → 如何在DOM中删除某一特点结点 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3999 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 如何在DOM中删除某一特点结点 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     sharri 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:57
      门派:XML.ORG.CN
      注册:2005/5/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sharri发送一个短消息 把sharri加入好友 查看sharri的个人资料 搜索sharri在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看sharri的博客楼主
    发贴心情 如何在DOM中删除某一特点结点

    我的这段程序是一个递归,根据输入的字符串查找到相应结点并修改其值.同时,在次过程中若发现另一指定结点,这里为删除status=“absent”的<senator>.但是程序运行时总是在该结点被删除之后报错,说出现空的指针. 谁能帮我解决这个问题?

    //////////////////////////////////////////////////////////////////////
        public static void findLoop(Node newNode, String newDate)
        {
          if (newNode.getNodeName().equals("date")) {
            newNode.getFirstChild().setNodeValue(newDate);
          }

          if ((newNode.getNodeName().equals("senator"))&& ( ( (Element) newNode).getAttributeNode("status").getNodeValue().
                equals("absent"))) {
              System.out.println(
                  "yes,already found the node which need to be removed!");
              Node parent = newNode.getParentNode();
              parent.removeChild(newNode);
              System.out.println("yes,already  removed!");

              }
            else {

              NodeList childs = newNode.getChildNodes();
              if (childs != null) {
                int length = childs.getLength();
                for (int loopIndex = 0; loopIndex < length; loopIndex++) {
                  findLoop(childs.item(loopIndex), newDate);

                }
              }
            }
          }


    //////////////////////////////////////////////////////////////////////////


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/10 13:06:00
     
     xhxasdf 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:20
      积分:133
      门派:XML.ORG.CN
      注册:2005/1/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xhxasdf发送一个短消息 把xhxasdf加入好友 查看xhxasdf的个人资料 搜索xhxasdf在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xhxasdf的博客2
    发贴心情 
    女的   搞  xml   强
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/11 9:15:00
     
     栖霞旧友 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:10
      积分:110
      门派:XML.ORG.CN
      注册:2005/4/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给栖霞旧友发送一个短消息 把栖霞旧友加入好友 查看栖霞旧友的个人资料 搜索栖霞旧友在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看栖霞旧友的博客3
    发贴心情 
    public static void removeNode(Document doc)
     {
     
      Element root = doc.getDocumentElement();
      NodeList children = root.getChildNodes();
      for (int i = 0; i <children.getLength(); i++)
      {
       if ((children.item(i).getNodeName().equals("senator"))&& ( children.item(i).getAttributes().getNamedItem("status").getNodeValue(). equals("absent")))
       {
        System.out.println(
         "yes,already found the node which need to be removed!");
        Node parent = children.item(i).getParentNode();
        parent.removeChild(children.item(i));
        System.out.println("yes,already  removed!");

       }

      }
    这样应该可以

    ----------------------------------------------
    小楼一夜听风雨,深巷明朝卖杏花。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/11 21:25:00
     
     sharri 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:57
      门派:XML.ORG.CN
      注册:2005/5/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sharri发送一个短消息 把sharri加入好友 查看sharri的个人资料 搜索sharri在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看sharri的博客4
    发贴心情 
    谢谢栖霞旧友!不过这样还是解决不了问题的。你这里用循环只检测了根节点下的第一层子节点,如果我要删除的节点在第二层,程序就不会找到它。而这个程序应该是能够删除任一层的复合该条件的节点,所以我用了递归。我想应该是递归时出的错误。可能我应该避免用递归的方法,但是我想不出别的办法。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/11 21:59:00
     
     残墨 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:18
      积分:128
      门派:XML.ORG.CN
      注册:2005/6/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给残墨发送一个短消息 把残墨加入好友 查看残墨的个人资料 搜索残墨在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看残墨的博客5
    发贴心情 
    关注中。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/10 11:20:00
     
     zb9030@126.com 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:87
      门派:XML.ORG.CN
      注册:2005/7/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zb9030@126.com发送一个短消息 把zb9030@126.com加入好友 查看zb9030@126.com的个人资料 搜索zb9030@126.com在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zb9030@126.com的博客6
    发贴心情 
    我找一个方法,不用递归找,就可以删除
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/22 14:47:00
     
     zb9030@126.com 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:87
      门派:XML.ORG.CN
      注册:2005/7/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zb9030@126.com发送一个短消息 把zb9030@126.com加入好友 查看zb9030@126.com的个人资料 搜索zb9030@126.com在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zb9030@126.com的博客7
    发贴心情 
    先用svgDocument.getElementById("删除的ID")得到它的节点,再用getParentNode()得到它的父节点.再用父节点删除它的子节点;这样就不用递归了,效率高好多
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/22 14:53:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/6/24 3:09:59

    本主题贴数7,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms