一个小许复杂的逻辑获取XML 请教

topbasemaster 2010-12-31 10:03:00
本人昨天才初学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>


...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
topbasemaster 2011-01-01
  • 打赏
  • 举报
回复
好呢!~ 我第2次 用dom4j,
接了这个任务对 他都有点了解, 哈哈 觉得 这些东西 都是要 实践出来的 谢谢大家
shanxmxj 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 topbasemaster 的回复:]
自己顶一下,
请问 当我 想 从 二级的节点 用e.getParent() 知道父节点,然后我想要 去检查 父节点的下一个节点
要如何操作呢?
[/Quote]
在递归的时候 把e.getParent() 当做节点值传进去

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



cwjbeyond 2010-12-31
  • 打赏
  • 举报
回复
LZ的主要意思是XML树的遍历规则为宽度优先,而不是广度优先。在2L的意思是父节点的兄弟节点?还是本节点的兄弟节点?
建议LZ先学习或复习数据结构中的树,再进行XML的深入学习。
PS:我也是刚接触XML的操作……
topbasemaster 2010-12-31
  • 打赏
  • 举报
回复
自己顶一下,
请问 当我 想 从 二级的节点 用e.getParent() 知道父节点,然后我想要 去检查 父节点的下一个节点
要如何操作呢?
shanxmxj 2010-12-31
  • 打赏
  • 举报
回复
<soap:Body>

判断下 这里的属性是不是folder
topbasemaster 2010-12-31
  • 打赏
  • 举报
回复
自己做来出来, 不过没有测试多几次, 估计应该对。
但另外一个小问题就出来了
就是如果在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"));
}
}
}

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧