问题描述
1.XML文件<?xml version="1.0" encoding="UTF-8"?><root target="sysmain" desc="非现场监管报送" id="Y000"><DataItem text="数据处理"><Item text="数据填报"></Item><Item text="文件提交"></Item><Item text="数据校验"></Item><Item text="数据汇总"></Item><Item text="Top(N)汇总"></Item></DataItem><DataItem text="报送管理" id="Y200"><Item text="报送项目管理"></Item><Item text="报送文件生成"></Item></DataItem><DataItem text="数据查询" id="Y300"></DataItem><DataItem text="制度查询" id="Y400"></DataItem><DataItem text="规则定制" id="Y500"></DataItem></root>2.JAVA类package com.pj.manager.action;import java.util.List;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;public class MenuTreeAction { public static void main(String[] args) throws Exception{ SAXBuilder sb=new SAXBuilder(); Document doc=sb.build("MenuXML/1104SiteMap.xml"); //构造文档对象 Element root=doc.getRootElement(); //获取根元素 List list=root.getChildren("DataItem");//取名字为DataItem的所有元素 for(int i=0;i<list.size();i++){ Element element = (Element)list.get(i); String DataItem = element.getAttributeValue("text"); System.out.println("父结点:"+DataItem); Element root2 = doc.getRootElement().getChild("DataItem"); List itemlist = root2.getChildren("Item"); String[] Item = new String[itemlist.size()]; for(int j=0; j<itemlist.size(); j++) { Element itemelement = (Element)itemlist.get(j); Item[j] = itemelement.getAttributeValue("text"); System.out.println("--子结点:"+Item[j]); } System.out.println("-----------------------------------"); } } }3.输出结果父结点:数据处理--子结点:数据填报--子结点:文件提交--子结点:数据校验--子结点:数据汇总--子结点:Top(N)汇总-----------------------------------父结点:报送管理--子结点:数据填报--子结点:文件提交--子结点:数据校验--子结点:数据汇总--子结点:Top(N)汇总-----------------------------------父结点:数据查询--子结点:数据填报--子结点:文件提交--子结点:数据校验--子结点:数据汇总--子结点:Top(N)汇总-----------------------------------父结点:制度查询--子结点:数据填报--子结点:文件提交--子结点:数据校验--子结点:数据汇总--子结点:Top(N)汇总-----------------------------------父结点:规则定制--子结点:数据填报--子结点:文件提交--子结点:数据校验--子结点:数据汇总--子结点:Top(N)汇总-----------------------------------4.**********疑问所在***********因为我在根结点root下面有多个相同的DataItem节点,我要取第二个DataItem下的所有Item节点应该如何去取???上面程序所有DataItem节点下的子结点都为第一个DataItem下的子节点。
解决方案
引用public class MenuTreeAction { public static void main(String[] args) throws Exception{ SAXBuilder sb=new SAXBuilder(); Document doc=sb.build("MenuXML/1104SiteMap.xml"); //构造文档对象 Element root=doc.getRootElement(); //获取根元素 List list=root.getChildren("DataItem");//取名字为DataItem的所有元素 for(int i=0;i<list.size();i++){ Element element = (Element)list.get(i); String DataItem = element.getAttributeValue("text"); System.out.println("父结点:"+DataItem); //Element root2 = doc.getRootElement().getChild("DataItem"); Element root2=element; List itemlist = root2.getChildren("Item"); String[] Item = new String[itemlist.size()]; for(int j=0; j<itemlist.size(); j++) { Element itemelement = (Element)itemlist.get(j); Item[j] = itemelement.getAttributeValue("text"); System.out.println("--子结点:"+Item[j]); } System.out.println("-----------------------------------"); } } } 试试看