有Menu这个model如下

private MenuId id;
private String intranetNo;
         public MenuId getId() {
return this.id;
} public void setId(MenuId id) {
this.id = id;
} public String getIntranetNo() {
return this.intranetNo;
} public void setIntranetNo(String intranetNo) {
this.intranetNo = intranetNo;
}
MenuId也是个实体类
private String sysNo;
private String progId;
public String getSysNo() {
return this.sysNo;
} public void setSysNo(String sysNo) {
this.sysNo = sysNo;
} public String getProgId() {
return this.progId;
} public void setProgId(String progId) {
this.progId = progId;
}
也是就是hibernate里,MenuId是复合主键
现在有一个List<Menu> menus ,如何生成xml文件,
并且读取xml文件返回List menus

解决方案 »

  1.   

    关注jdom dom4j 不可以吗这种情况还真没遇到过
      

  2.   

    java读取xml的四种方法:xml文件
    <?xml version="1.0" encoding="GB2312"?>
    <RESULT>
     <VALUE>
        
      <NO>A1234</NO>
        
      <ADDR>四川省XX县XX镇XX路X段XX号</ADDR>
     </VALUE>
     <VALUE>
        
      <NO>B1234</NO>
         
      <ADDR>四川省XX市XX乡XX村XX组</ADDR>
     </VALUE>
    </RESULT> 
    第一种 DOM 实现方法
    import java.io.File;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    public class MyXMLReader2DOM {
     public static void main(String arge[]) {
      long lasting = System.currentTimeMillis();
     
      try {
       File f = new File("data_10k.xml");
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document doc = builder.parse(f);
       NodeList nl = doc.getElementsByTagName("VALUE");
       for (int i = 0; i < nl.getLength(); i++) {
        System.out.print("车牌号码:"+ doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
        System.out.println("车主地址:"+ doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    }
    第二种,DOM4J实现方法
    import java.io.*;
    import java.util.*;
    import org.dom4j.*;
    import org.dom4j.io.*;
    public class MyXMLReader2DOM4J {
     public static void main(String arge[]) {
      long lasting = System.currentTimeMillis();
      try {
       File f = new File("data_10k.xml");
       SAXReader reader = new SAXReader();
       Document doc = reader.read(f);
       Element root = doc.getRootElement();
       Element foo;
       for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
        foo = (Element) i.next();
        System.out.print("车牌号码:" + foo.elementText("NO"));
        System.out.println("车主地址:" + foo.elementText("ADDR"));
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    }
    第三种 JDOM实现方法
    import java.io.*;
    import java.util.*;
    import org.jdom.*;
    import org.jdom.input.*;
    public class MyXMLReader2JDOM {
     public static void main(String arge[]) {
      long lasting = System.currentTimeMillis();
      try {
       SAXBuilder builder = new SAXBuilder();
       Document doc = builder.build(new File("data_10k.xml"));
       Element foo = doc.getRootElement();
       List allChildren = foo.getChildren();
       for (int i = 0; i < allChildren.size(); i++) {
        System.out.print("车牌号码:"+ ((Element) allChildren.get(i)).getChild("NO").getText());
        System.out.println("车主地址:"+ ((Element) allChildren.get(i)).getChild("ADDR").getText());
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    }
    第四种SAX实现方法
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import org.xml.sax.Attributes;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    public class MyXMLReader2SAX extends DefaultHandler {
     java.util.Stack tags = new java.util.Stack();
     public MyXMLReader2SAX() {
      super();
     }
     public static void main(String args[]) {
      long lasting = System.currentTimeMillis();
      try {
       SAXParserFactory sf = SAXParserFactory.newInstance();
       SAXParser sp = sf.newSAXParser();
       MyXMLReader2SAX reader = new MyXMLReader2SAX();
       sp.parse(new InputSource("data_10k.xml"), reader);
      } catch (Exception e) {
       e.printStackTrace();
      }
      System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
        + "毫秒");
     }
     public void characters(char ch[], int start, int length)
       throws SAXException {
      String tag = (String) tags.peek();
      if (tag.equals("NO")) {
       System.out.print("车牌号码:" + new String(ch, start, length));
      }
      if (tag.equals("ADDR")) {
       System.out.println("地址:" + new String(ch, start, length));
      }
     }
     public void startElement(String uri, String localName, String qName,
       Attributes attrs) {
      tags.push(qName);
     }
    }
      

  3.   

    package com;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Test { // *生成xml
     public String createXML() {
      try {
       // 生成根节点,并为根节点添加属性和属性值
       Element root = (Element) DocumentHelper.createElement("根节点")
         .addAttribute("id", "编号").addAttribute("name", "名称");
       // 生成子节点,并为子节点添加属性和属性值
       Element childElement = DocumentHelper.createElement("子节点")
         .addAttribute("id", "子节点编号");
       // 为节点添加值
       childElement.addText("子节点值");
       // 将子节点添加到根节点
       root.add(childElement);
       String filename = "jinchun.xml";
       Document responseDoc = DocumentHelper.createDocument(root);
       OutputFormat outputFormat = OutputFormat.createPrettyPrint();
       outputFormat.setEncoding("GB2312");
       XMLWriter xMLWriter = new XMLWriter(new FileWriter(filename),
         outputFormat);
       xMLWriter.write(responseDoc);
       xMLWriter.close();
      } catch (IOException e) {    e.printStackTrace();
      }
      return "new ok!";
     } /** * 解析XML */
     public void parseXML() {
      try {
       SAXReader sAXReader = new SAXReader();
       // 要解析的xml文件
       File file = new File("jinchun2.xml");
       Document document = sAXReader.read(file);
       // 获取根节点
       Element acreen = document.getRootElement();
       // 打印根节点属性
       System.out.println(acreen.attributeValue("id"));
       System.out.println(acreen.attributeValue("name"));
       // 获取子节点
       List<Element> helloments = acreen.elements("子节点");
       for (Element helloment : helloments) {
        // 打印子节点属性
        System.out.println(helloment.attributeValue("id"));
        System.out.println(helloment.getText());
       }
      } catch (DocumentException e) {   e.printStackTrace();
      }
     } public static void main(String args[]) {
      Test test = new Test();
      test.createXML();
      test.parseXML();
     }}
    ********************jinchun2.xml文件<?xml version="1.0" encoding="GB2312"?><根节点 id="编号" name="名称">
      <子节点 id="子节点编号1">子节点值</子节点>
       <子节点 id="子节点编号2">子节点值</子节点>
        <子节点 id="子节点编号3">子节点值</子节点>
         <子节点 id="子节点编号4">子节点值</子节点>
          <子节点 id="子节点编号5">子节点值</子节点>
           <子节点 id="子节点编号6">子节点值</子节点>
    </根节点>
      

  4.   

    你生成的xml的格式应该是这样的啊
    <menu>
      <menuid>
         <sysNo>value</sysNo>
         <progId>value</progId>
      </menuid>
      <intranetNo>value</intranetNo>
    </menu>你按照这样的格式去生成应该不难!  
      

  5.   

    给你看看我的例子: package com.xh.xml;    
         
    import java.io.FileOutputStream;    
    import java.io.IOException;    
    import org.jdom.Document;    
    import org.jdom.Element;    
    import org.jdom.JDOMException;    
    import org.jdom.output.XMLOutputter;    
         
    public class Java2XML {    
         
        public void BuildXMLDoc() throws IOException, JDOMException {    
         
           // 创建根节点 list;    
            Element root = new Element("list");    
               
           // 根节点添加到文档中;    
            Document Doc = new Document(root);    
         
           // 此处 for 循环可替换成 遍历 数据库表的结果集操作;    
           for (int i = 0; i < 5; i++) {    
                   
               // 创建节点 user;    
               Element elements = new Element("user");    
                   
               // 给 user 节点添加属性 id;    
               elements.setAttribute("id", "" + i);    
                   
               // 给 user 节点添加子节点并赋值;    
               // new Element("name")中的 "name" 替换成表中相应字段,setText("xuehui")中 "xuehui 替换成表中记录值;    
               elements.addContent(new Element("name").setText("xuehui"));   
               elements.addContent(new Element("age").setText("28"));   
               elements.addContent(new Element("sex").setText("Male"));   
        
               // 给父节点list添加user子节点;   
               root.addContent(elements);   
        
           }   
            XMLOutputter XMLOut = new XMLOutputter();   
              
           // 输出 user.xml 文件;   
            XMLOut.output(Doc, new FileOutputStream("user.xml"));   
        }   
        
        public static void main(String[] args) {   
           try {   
               Java2XML j2x = new Java2XML();   
               System.out.println("生成 mxl 文件...");   
               j2x.BuildXMLDoc();   
           } catch (Exception e) {   
               e.printStackTrace();   
           }   
        }   
        
    }   
        
        
    生成的 user.xml  文件   
        
    <?xml version="1.0" encoding="UTF-8"?>   
    <list>   
        <user id="0">   
            <name>xuehui</name>   
            <age>28</age>   
            <sex>Male</sex>   
        </user>   
        <user id="1">   
            <name>xuehui</name>   
            <age>28</age>   
            <sex>Male</sex>   
        </user>   
        <user id="2">   
            <name>xuehui</name>   
            <age>28</age>   
            <sex>Male</sex>   
        </user>   
        <user id="3">   
            <name>xuehui</name>   
            <age>28</age>   
            <sex>Male</sex>   
        </user>   
        <user id="4">    
            <name>xuehui</name>    
            <age>28</age>    
            <sex>Male</sex>    
        </user>    
    </list>