我的需求是这样的:有多个父菜单项,每个父菜单项里面都包含多个子菜单项和子菜单项的URL。我想将属于这个父菜单项的多个子菜单都包含在这个父菜单项的节点里。比如:名片夹管理有两个子菜单项:
         名称           URL
         员工管理       manager.jsp
         客户管理       manager2.jsp
我这样写的,不知道对不对,但是用Java程序读的时候怎么读呢?
<books>
<menu name="客户管理">
<link>
<linkname>客户管理</linkname>
<url>manager.jsp</url>
</link>
<link>
<linkname>员工管理</linkname>
<url>manager.jsp</url>
</link>
</menu>
<menu name="信息库管理">
<link>
<linkname>信息类别管理</linkname>
<url>infoTypeManager.jsp</url>
</link>
<link>
<linkname>常用短语管理</linkname>
<url>shortInfo.jsp</url>
</link>
</menu>
</books>

解决方案 »

  1.   

    楼主这样写也可以,但是读起来麻烦点,不如,记住层数越多读起来越麻烦。
    解析用jdom或dom4j啊。这种两层的很容易的。
    <books>
    <menu name="客户管理">
    <link name="客户管理" url="manager.jsp"/>
    <link name="员工管理" url="manager.jsp"/>
    </menu>
    <menu name="信息库管理">
    <link name="信息类别管理" url="infoTypeManager.jsp">
    <!--假如还有子菜单-->
      <sublink name="信息类别1管理" url="infoTypeManager.jsp"/>
    </link>
    ...
    </menu>
    </books>
      

  2.   

    try {
    File f = new File("WebRoot/WEB-INF/first.xml");    
      
    SAXReader reader = new SAXReader();        
      
    Document doc;

    doc = reader.read(f);

    Element root = doc.getRootElement();    
      
    Element foo; 

    for (Iterator i = root.elementIterator("menu"); i.hasNext();){    
      
    foo = (Element)i.next();    
      
    System.out.println("名称:" + foo.elementText("name"));    
      
    System.out.println("价格:" + foo.elementText("url"));    
      
    }    

    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }    
      

  3.   

    这是我代码,麻烦crazylaa给修改哈,谢谢!我真不懂这个,明天要用滴!!
      

  4.   

    import java.util.*;
    import org.dom4j.*;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;public static void test() {
    try {
    File f = new File("F:/test.xml"); SAXReader reader = new SAXReader(); Document doc; doc = reader.read(f); Element root = doc.getRootElement(); // 取到所有menu,并循环
    for (Iterator i = root.elementIterator("menu"); i.hasNext();) { Element menu = (Element) i.next();
    // 取到所有的link并循环
    for (Iterator j = menu.elementIterator("link"); j.hasNext();) {
    Element link = (Element) j.next();
    // 取attribute值即可。
    System.out.println("名称:" + link.attributeValue("name")); System.out.println("url:" + link.attributeValue("url"));
    }
    } } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }拷贝了试试,这事xml,用UTF-8编码的,记事本编辑的可能不行,我在jbuilder里面编辑的设置了textfile encoding=utf-8。
    <?xml version="1.0" encoding="UTF-8" ?>
    <books>
    <menu name="客户管理">
    <link name="客户管理" url="manager.jsp"/>
    <link name="员工管理" url="manager.jsp"/>
    </menu>
    <menu name="信息库管理">
    <link name="信息类别管理" url="infoTypeManager.jsp"/>
    </menu>
    </books>这事结果:
    名称:客户管理
    url:manager.jsp
    名称:员工管理
    url:manager.jsp
    名称:信息类别管理
    url:infoTypeManager.jsp