从xml创建树结构

时间:2011-02-23 08:48:31

标签: java javascript

我有像

这样的XML
<rootXml>
    <category id="1" name="Dept 1" folderPath="/css" leftHt="400"
        leftWd="50" rightHt="400" rightWd="50">
        <category id="2" name="Service 1" folderPath="/news/world"></category>
        <category id="3" name="Service 2" folderPath="/news/local"></category>
        <category id="4" name="Service 3" folderPath="/news/crime"></category>
        <category id="5" name="Service 4" folderPath="/news/humaninterest"></category>
    </category>
</rootXml>

我想在jsp中创建一个显示为

的树结构
Dept1 
   Service1
   Service2
   Service3
   Service4

基本上在单击父节点时,应显示其子节点。

之前我使用过dojo,但它非常沉重,并希望通过我自己的代码来开发它。我有xml的DOM对象和我的所有数据,如何继续下一步?

2 个答案:

答案 0 :(得分:0)

创建数据模型(如果您还没有)。您似乎需要具有字段名称,folderPath等的类别。 此外,它应包含类别集合:

private Collection<Category> = new ArrayList<Category>();

现在使用DOM API迭代节点,创建Category对象并将它们添加到父对象。您应该使用类似堆栈的结构:当您看到类别标记时,创建对象并将其添加到堆栈中。然后迭代内部标记。当您遇到类别标签再次创建对象时,从堆栈中获取父类别并将当前类别添加到父级。

或者,您可以实现递归方法,该方法接收DOM作为参数的当前父元素。

但为什么要做这一切呢?使用更高级别的工具,如Digester或JAXB,几乎可以免费获得所需的一切!

答案 1 :(得分:0)

嗯,基本上,你已经有了一棵带有DOM树的树

如果你想在数组中包含结构,你应该这样做:

// lets say that obj is the <rootXml> object - the root of the tree

    function makeTree( obj ){
      var a = ob.childNodes;
      if(a.length == 0) return obj;

      var tree = [];
      for(var i in a){
        if(a.childNodes.length > 0) // if it has children -> it is a node
            tree.push( makeTree(a[i]) );
          else // it doesn't have any children -> it is a leaf
            tree.push( a[i] );
      }

      return tree;
    }

    var tree = makeTree( obj );

这就是你递归创建子树的方式