本人遇到一XML:
<Autos>
<groupItem id="1" label="默认分组" parentid="" order="1"/>
<groupItem id="1334907795" label="分组" parentid="" order="1334907795">
<groupItem id="1334907805" label="一组" parentid="1334907795" order="1334907805">
<groupItem id="1334907812" label="二组" parentid="1334907805" order="1334907812">
<groupItem id="1334907818" label="三组" parentid="1334907812" order="1334907818">
<autoItem id="40003" groupid="1334907818" order="0">我要说的沙发大厦</autoItem>
</groupItem>
</groupItem>
</groupItem>
</groupItem>
<groupItem id="1334719791" label="日常用语" parentid="" order="1334719791">
<autoItem id="40002" groupid="1334719791" order="0">少年不知愁滋味,欲说还休,却道天凉好个秋。</autoItem>
<autoItem id="40001" groupid="1334719791" order="0">生活如此美好,你却如此暴躁,这样不好!</autoItem>
</groupItem>
</Autos>上面是xml
------------------------------------------------------
下面是解析后显示到页面为树的情况+ 默认分组
+ 分组
一组
  二组
  + 三组
    我要说的沙发大厦
+ 日常用语
少年不知愁滋味,欲说还休,却道天凉好个秋。
生活如此美好,你却如此暴躁,这样不好!
-------------------------------------------------------------------------------------
本人使用DOM4J进行,
if(null != result){
  Document document = null;
try{
 document = DocumentHelper.parseText(result);
}catch(Exception e){
e.printStackTrace();
}
        // 获得根节点  
        Element root = document.getRootElement();
        
        for (Iterator i = root.elementIterator("groupItem");i.hasNext();) {
         Element groupItem = (Element) i.next();
             //到这里我就只得到数据:默认分组,分组,日常用语
--------------------------------------------------------------------
提问:如何获取所有的并将它如要求显示。 
        }

解决方案 »

  1.   

    首先新建一个javabean,用来保存GroupItem节点:
    import java.util.List;public class GroupItem {
    private String id;
    private String label;
    private String parentid;
    private String order;
    private List<GroupItem> groupList;
    public String getId() {
    return id;
    }
    public void setId(String id) {
    this.id = id;
    }
    public String getLabel() {
    return label;
    }
    public void setLabel(String label) {
    this.label = label;
    }
    public String getParentid() {
    return parentid;
    }
    public void setParentid(String parentid) {
    this.parentid = parentid;
    }
    public String getOrder() {
    return order;
    }
    public void setOrder(String order) {
    this.order = order;
    }
    public List<GroupItem> getGroupList() {
    return groupList;
    }
    public void setGroupList(List<GroupItem> groupList) {
    this.groupList = groupList;
    }
    }
    然后再书写一个方法来封装GroupItem对象,这个方法需要用到递归: /**
     * 根据节点对象和节点名获取GroupItem对象
     * @param element 包含groupItem子节点的groupItem节点对象
     * @return GroupItem对象
     * @since CodingExample Ver(编码范例查看) 1.1
     */
    public GroupItem getElement(Element element){
    //验证节点是否符合规则
    if(!"groupItem".equals(element.getName())){
    return null;
    }
    GroupItem groupItem = new GroupItem();

    //设置groupItem属性,此处可根据反射编写
    groupItem.setId(element.attributeValue("id"));
    groupItem.setLabel(element.attributeValue("label"));
    groupItem.setParentid(element.attributeValue("parentid"));
    groupItem.setOrder(element.attributeValue("order"));

    //获得groupItem子节点集合
    List<Element> list = element.elements("groupItem");


    List<GroupItem> gList = new ArrayList<GroupItem>();
    if(list != null && list.size() != 0){
    //如果groupItem子节点不为空,则遍历
    for (Element ele : list) {
    //循环添加相关的GroupItem对象
    gList.add(getElement(ele));
    }
    } //设置子groupItem集合
    groupItem.setGroupList(gList);
    return groupItem;
    }

    最后就是调用了,将“默认分组”这个节点传入到方法中返回一个GroupItem对象,里面就有所有的元素。
    然后就看你怎么遍历了