java xml处理技术二

XML处理技术(2)

关键词: XML处理技术                                          

 

 

1.3    XStream的使用

在使用 XStream 之前首先到 http://xstream.codehaus.org 下载 XStream 的最新版本,然后把 XSteam***.jar xpp3-***.jar 导入到 ClassPath 下,然后就可以使用了,当然不加入 xpp3-***.jar 也可以,我们可以使用 DomDriver 做为 XML 解析驱动(只要在实例化 XStream 的时候使用 new XStream(new DomDriver()) 即可),不过 Xpp3 XStream 提供的一个很有效率的 XML pull-parser 实现,推荐使用,可以提高解析的效率。

XML 的解析

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

<book>

     <name>J2EE Guide Book</name>

     <author>

         <name>Jerry</name>

         <email>[email protected]</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 :[email protected]     

由于 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("[email protected]");

PersonInfo p2 = new PersonInfo();

p2.setName("Jerry");

p2.setEmail("[email protected]");

    

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>[email protected]</email>

    </author>

  </com.cownew.Char0503.BookInfo>

  <com.cownew.Char0503.BookInfo>

    <name>UI Design</name>

    <author>

      <name>Jerry</name>

      <email>[email protected]</email>

    </author>

  </com.cownew.Char0503.BookInfo>

</list>

 

 

 

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

不过美中不足的就是“ <com.cownew.Char0503.BookInfo> ”这个标签显得有点罗嗦。解决方式很简单,使用 5.3.1 一节中提到的 alias 方法就可以办到:

xstream.alias("book", BookInfo.class); 添加到 XStream xstream = new XStream(); 之后,然后重新运行:

 

<list>

  <book>

    <name>About Face</name>

    <author>

      <name>Tom</name>

      <email>[email protected]</email>

    </author>

  </book>

  <book>

    <name>UI Design</name>

    <author>

      <name>Jerry</name>

      <email>[email protected]</email>

    </author>

  </book>

</list>

你可能感兴趣的:(java,xml,String,list,Class,email)