Map与XML的转换收藏

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转换成一个树型目录了,具体的应用,随意了。

你可能感兴趣的:(数据结构,xml,Hibernate,脚本)