xsteam解析xml

利用xstream实现JAVABEAN和XML交互
在使用 XStream 之前首先到 http://xstream.codehaus.org 下载 XStream 的最新版本,然后把 XSteam***.jar 和 xpp3-***.jar 导入到 ClassPath 下,然后就可以使用了,当然不加入 xpp3-***.j
ar 也可以,我们可以使用 DomDriver 做为 XML 解析驱动(只要在实例化 XStream 的时候使用 new XStream(new DomDriver()) 即可),不过 Xpp3 为 XStream 提供的一个很有效率的 XML pull-parser 实现,推荐使用,可以提高解析的效率。
XStream是个很小的开源项目,所以它能实现的功能也就很有限,它只能包装简单类型的元素进行转换,复杂类型的,比如Calendar,Date等类型则需要用户自己实现Converter。
还有,XStream对xml的操作并不好,比如想把一个子节点变成属性就是一个很复杂的工作,但是大家平时用于测试的话,看看对象中到底存着什么数据,还是必要的。

XML 的解析
我们有一个记录书籍进行的 XML 文件:

<book>

      <name>J2EE Guide Book</name>

      <author>

          <name>Jerry</name>

          <email>Jerry@mail.com</email>

      </author>

</book>

为了解析此 XML 文件,我们首先创建代表书籍和人员的两个 JavaBean 。

代码 5 . 3 人员和书籍的 JavaBean

public class BookInfo

{

      private String name;

      private PersonInfo author;

      public PersonInfo getAuthor()

      {

          return author;

      }

      public void setAuthor(PersonInfo author)

      {

          this.author = author;

      }

      public String getName()

      {

          return name;

      }

      public void setName(String name)

      {

          this.name = name;

      }

}

 

public class PersonInfo

{

      private String name;

      private String email;

      public String getEmail()

      {

          return email;

      }

      public void setEmail(String email)

      {

          this.email = email;

      }

      public String getName()

      {

          return name;

      }

      public void setName(String name)

      {

          this.name = name;

      }

}

然后我们就可以进行文件的解析了,这也是重头戏:

代码 5 . 4 XStream 的 XML 解析

XStream xstream = new XStream();

xstream.alias("book", BookInfo.class);

xstream.alias("author", PersonInfo.class);

InputStream inStream = XStreamDemo.class

          .getResourceAsStream("/com/cownew/Char0503/Books.xml");

InputStreamReader reader = new InputStreamReader(inStream);

BookInfo book = (BookInfo) xstream.fromXML(reader);

StringBuffer sb = new StringBuffer();

sb.append(book.getName()).append(" 的作者 ");

sb.append(book.getAuthor().getName()).append(" 的 Email 为 :");

sb.append(book.getAuthor().getEmail());

System.out.println(sb);

运行结果:

J2EE Guide Book 的作者 Jerry 的 Email 为 :Jerry@mail.com     

由于 book 节点和 author 节点对应的数据类型是我们的自定义类型,因此我们必须首先向 XStream 注册这两个类型 :

xstream.alias("book", BookInfo.class);

xstream.alias("author", PersonInfo.class);

由于我们是使用 XStream 解析已有的 XML 文件,因此我们必须让 XStream 知道标签对应的类型是什么,如果我们是使用 XStream 进行 XML 文件的生成,那么我们甚至无需向 XStream 注册别名即可进行文件解析。

注册完类型以后,调用 XStream 类的 fromXML 方法即可把 XML 解析成 JavaBean 对象,无需额外的操作。

XML 文件的保存

我们不仅需要解析 XML 文件,有的时候还需要将数据保存到 XML 文件, XStream 同样能很好的完成,并且能更体现出 XStream 的强大。

代码 5 . 5 XStream 中 XML 的保存

List bookList = new ArrayList();

PersonInfo p1 = new PersonInfo();

p1.setName("Tom");

p1.setEmail("Tom@mail.com");

PersonInfo p2 = new PersonInfo();

p2.setName("Jerry");

p2.setEmail("Jerry@mail.com");

    

BookInfo book1 = new BookInfo();

book1.setName("About Face");

book1.setAuthor(p1);

BookInfo book2 = new BookInfo();

book2.setName("UI Design");

book2.setAuthor(p2);

    

bookList.add(book1);

bookList.add(book2);

    

XStream xstream = new XStream();

String xml = xstream.toXML(bookList);

System.out.println(xml);

    

List list = (List) xstream.fromXML(xml);

for(int i=0,n=list.size();i<n;i++)

{

      BookInfo book = (BookInfo) list.get(i);

      StringBuffer sb = new StringBuffer();

      sb.append(book.getName()).append(" 的作者 ");

      sb.append(book.getAuthor().getName()).append(" 的 Email 为 :");

      sb.append(book.getAuthor().getEmail());

      System.out.println(sb);

}

运行结果:

<list>

   <com.cownew.Char0503.BookInfo>

     <name>About Face</name>

     <author>

       <name>Tom</name>

       <email>Tom@mail.com</email>

     </author>

   </com.cownew.Char0503.BookInfo>

   <com.cownew.Char0503.BookInfo>

     <name>UI Design</name>

     <author>

       <name>Jerry</name>

       <email>Jerry@mail.com</email>

     </author>

   </com.cownew.Char0503.BookInfo>

</list>

About Face 的作者 Tom 的 Email 为 :Tom@mail.com

UI Design 的作者 Jerry 的 Email 为 :Jerry@mail.com

 

不可思议吧!我们就是像在序列化一样把 JavaBean “序列化”为 XML 格式字符串,然后又轻松的将 XML 格式字符串“反序列化”为 JavaBean 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值