要转换的xml
<?xml version="1.0" encoding="UTF-8"?>
<User>
<Age>23</Age>
<NameList>
<name>name1</name>
<name>name2</name>
<name>name3</name>
<name>name4</name>
</NameList>
</User>对应的 User 类
public class User {

private int age;

private List nameList;
}
请问:对于这样的xml转换成bean 用apache 的 simpleXml 该怎样实现呢? 谢谢!

解决方案 »

  1.   

    推荐用dom4j来解析xml,这个不难,更多信息请百度
      

  2.   

    File file= new File(xmlFileName); DocumentBuilderFactory ch =          DocumentBuilderFactory.newInstance();
    DocumentBuilder db = ch.newDocumentBuilder() ;
    Document dom = db.parse(file) ;
    NodeList nl_sr = dom.getElementsByTagName("source-rightCode");//以下请参考JDK API
      

  3.   

    其实就是解析xml文件,然后赋值给你的bean对象。用什么解析方式得看你的具体需求
      

  4.   

    首先谢谢 楼上的几位,用dom4j 也好 SAXReader 也好,jdk自带的也罢,想用他们来实现xml转换成bean 都得是先一个一个的把节点解析出来然后赋值,这样要解析很多的xml 效率很慢。而我用的 simpleXml 工具 可以 直接将 xml 转成bean 不用自己解析 xml。但是我现在是遇到 了 刚才提到的问题。再次感谢楼上的几位!
      

  5.   

    import com.thoughtworks.xstream.*;
    import com.google.common.io.*;
    import com.google.common.base.*;
    public class Main {
        public static void main(final String[] args) throws Exception{
            XStream xstream = new XStream();
            xstream.alias("User",User.class);
            xstream.aliasField("Age",User.class,"age");
            xstream.aliasField("NameList",User.class,"nameList");
            xstream.alias("name",String.class);
            
            User user = (User)xstream.fromXML(Resources.toString(Resources.getResource(Main.class,"user.xml"),Charsets.UTF_8));
            System.out.println(xstream.toXML(user));
        }
    }
    user.xml 就是你上面那段xml,和 Main.class 放到同一个目录下。
    依赖的库 xstream, google guava r09.
      

  6.   

    最后一句的输出是<User>
      <Age>23</Age>
      <NameList>
        <name>name1</name>
        <name>name2</name>
        <name>name3</name>
        <name>name4</name>
      </NameList>
    </User>
      

  7.   

    huntor 你好,用xstream 这个可以,我也在1.4 的工程里面用这个,但这个有个问题就是 在bean 和 xml 特别多的情况下,做别名映射 和 属性 映射 很不方便。现在有个工程的 1.5 下的,所以找到了 用 simpleXml,这个支持注解,用起来比较方便。但是对于这种情况,难道要在String 的类上面加个@Root(name="name") 这样的注解??? 
      

  8.   

    simple-xml 的话@ElementList(name="NameList",entry="name")
    private List<String> nameList;<User>
       <Age>23</Age>
       <NameList class="java.util.ArrayList">
          <name>name1</name>
          <name>name2</name>
          <name>name3</name>
          <name>name4</name>
       </NameList>
    </User>
    class="java.util.ArrayList" 怎么去掉?
      

  9.   

    xstream 也有 annotation ,功能好像比api弱多了。@XStreamAlias("Age")
    private int age;
      

  10.   

    class="java.util.ArrayList" 怎么去掉?   对啊,这个怎么去掉? 我也不知道,呵呵! 是不是跟 @ElementArray 这个注解产生的 length 是一回事? 难道都不可以 去掉???在 xml 转bean 的时候 用@ElementList 时,class="java.util.ArrayList" 这个可以 没有,  但是用@ElementArray 时, 那个  length 属性必须得有 太讨厌了。
    对于XStream 的注解  弱在什么地方了呢?
      

  11.   

    楼主 你这个问题怎么解决了 。我现在也是遇得到了xml转换bean的问题 。楼主你能把你解决的方法告诉我不,谢谢了!比较急 
      

  12.   

    我用XSteam解析,但是他们的别名有下划线,与bean里面的字段名就不能匹配了。
      

  13.   

    用 XStream 解析的时候,别名有下划线是没有问题的。