本人昨天才初学dom4j , 现在需要实现一个小小逻辑, 昨天折腾了大半天  还是搞不定,要请教一下大虾们1,获取一个节点 folder , 检查view属性是否等于document ,
2,如果有的话就把name属性打印出来 ,然后就不去迭代下一级别的folder,而去检查同级别的下一个兄弟节点folder;
3,如果第一步是 否的 话 就去遍历下一个级别的folder就是检查到 如果有document 的 就不去检查一下级别,而去检查同级别的
然后 把合符条件的 name 的值 打印出来我写了大半天 要不递归错误 或者出错 怎样的 好蛋疼XML 如下:<folder name="USER_ROOT">
<folder name="Briefcase" view="document" perm="rwidxapfc">
<acl />
<folder name="a" view="music" perm="rwidxapfc">
<folder name="b" view="document" perm="rwidxapfc">
<folder name="c" view="document" perm="rwidxapfc" />
</folder>
</folder> <folder name="test123" view="document" perm="rwidxapfc">
<folder name="My" view="document" perm="rwidxapfc" />
<folder name="My Files" view="document" perm="rwidxapfc">
<folder name="aa" view="document" perm="rwidxapfc" />
</folder>
<folder name="My Music" view="document" perm="rwidxapfc">
<folder name="My Music" view="document" perm="rwidxapfc" />
</folder>
</folder>
</folder>
</folder>

解决方案 »

  1.   

    自己顶一下, 
    请问 当我 想 从 二级的节点 用e.getParent() 知道父节点,然后我想要 去检查 父节点的下一个节点 
    要如何操作呢?
      

  2.   

    LZ的主要意思是XML树的遍历规则为宽度优先,而不是广度优先。在2L的意思是父节点的兄弟节点?还是本节点的兄弟节点?
    建议LZ先学习或复习数据结构中的树,再进行XML的深入学习。
    PS:我也是刚接触XML的操作……
      

  3.   

    http://mikey-tsu.javaeye.com/blog/813289
    参考一下这个 
    判断一下 如果属性是document 打印name 然后不去递归这个节点 直接跳出循环 判断下一个节点 
    否则就进行递归
     
      

  4.   

    在递归的时候 把e.getParent() 当做节点值传进去
      

  5.   

    自己做来出来, 不过没有测试多几次, 估计应该对。
    但另外一个小问题就出来了
    就是如果在folder 元素之前 如果有以下的东西: 要如何跳过?
    ,soap:Envelope xmlns:soap="http://www.w3.org/2003/05/-envelope">
    <soap:Header>
    <context xmlns="urn:XXX">
    <change acct="d96c5edd-fc55-E30c-89dd-E2c0aEe4cbb9" token="8063"/>
    </context>
    </soap:Header>
    <soap:Body>
    public static void findName2(Element root) {

    List<Element> list = root.elements("folder");
    // 迭代所有
    for (Element e : list) {
    if(!("document".equals(e.attributeValue("view")))){
    if(e.elementIterator().hasNext()){
    findName2(e);
    }
    }else{
    System.out.println("检测到 document 属性"+ e.attributeValue("name"));
    }
    }
    }
      

  6.   

    <soap:Body>
    判断下 这里的属性是不是folder
      

  7.   

    好呢!~ 我第2次 用dom4j, 
    接了这个任务对 他都有点了解, 哈哈   觉得 这些东西 都是要 实践出来的   谢谢大家