Map与XML的转换

 

好久没来这里逛了哈,这些天实在懒得写东西了,工作以后才知道编程确实是件很痛苦的事,虽然每次完成任务时总是压抑不住心中那种成功的喜悦(很阿Q)。

最近任务不多,总想给自己点事做做,于是开始研究jdk中一个很重要的数据类型----Map。

map的数据结构类似于数据库的数据存储方式,键和值的对应,之间的映射,更重要的一点是通过map.entry这个类似于指针的接口在外部对其进行任意的修改。在这里我们通过一个动态生成树的例子介绍一下它的用法吧...

网页中,树型目录菜单是一个很常见的菜单显示方式,通常我们都是利用已经设置好的数据通过客户端脚本拼装后展现,在树的结构比较简单或要求显示效果绚丽的话,是一个很好的选择。如果我们的树型目录是一个不断变化的树呢,比如用树来显示一个部门的所有员工的在线状态?

这时我们就需要考虑用后台实现了,通过map,我们假设它的key对应的是树的目录名称,key对应它的链接地址。如果有下级目录,则把该目录再封装到一个新的map中,作为主map的一个节点。这样就可以使用一个主map展现目录的所有内容了。

代码贴出来吧,发现这里的html代码编辑功能实在太差了-_-!!.

      /**
         * 列出树型列表的所有元素
         * 该方法将把所有节点的元素展开,如果需要,应该在前台进行重新包装
         * 这里要注意的是map的实现类要为TreeMap,其他类型的话,要修改
         * equals(TreeMap.class) ,下面的另一个方法同理    
         * @param map
         * @return
         */
 public static  String getType(Map map) {
 Set set = map.entrySet();
 Iterator it = set.iterator();
 while (it.hasNext()) {// 把当前要遍历的节点当作根节点
     Map.Entry entry = (Map.Entry) it.next();
     if (entry.getValue().getClass().equals(TreeMap.class)) {// 下一级节点
        System.out.println(entry.getKey());// 读取该节点的名称
        getType((TreeMap) entry.getValue());
       } else {// 到达该节点的顶点
         System.out.println(entry.getKey() + ":" + entry.getValue());
      }
  }
     return null;
 }

    利用迭代的方法可以写出取某节点下的所有内容、指定节点的内容等功能,方法大同小异,这里不敷述了。map的数据来源可以是多样的,最主要的是从数据库中取得数据,对于map如何和数据库数据进行映射,网上应该资料很多,关键在于把所需要的数据先包装到一个bo中,再对map进行填充。目前hibernate应该是不个不错的选择。
   map于xml的转换,其实也是很简单的:

     /**
         * 将map类型数据转换成XML文档
         *
         * @param map
         *                该节点
         * @param element
         *                上一级节点
         * @return
         */
 public void parseToXML(Map map, Element element) {
 /** 开始对map进行解析 */
 if (map == null)
     throw new NullPointerException("map 数据为空,不能解析!");
 Set set = map.entrySet();
 Iterator records = set.iterator();
 while (records.hasNext()) {
       Map.Entry entry = (Map.Entry) records.next();
       if (entry.getValue().getClass().equals(TreeMap.class)) {// 子目录
        Element node = new Element("node");
        node.setAttribute("name", entry.getKey().toString());
        element.addContent(node);
        parseToXML((TreeMap) entry.getValue(), node);
       } else {// 到达顶点
              Element node = new Element("node");
              node.setAttribute("name", entry.getKey().toString());
              Element value = new Element("value");
              value.setText(entry.getValue().toString());
              node.addContent(value);
              element.addContent(node);
     }
  }
}
注意的是element是需要获取的,当我们声明了一个xml doc文档后,根节点root可以作为参数传进去,处理完后,再对root进行读取就可以了:

  parseToXML(map, root);
  doc = new Document(root);
这样我们就可以把map转换成一个树型目录了,具体的应用,随意了。

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值