XStream将XML映射到对对象

<?xml version="1.0"  encoding="UTF-8"?> <address-book>

<contacts>     <contact id="01" type="家庭" >         <name>张三</name>         <address>黄山路666号</address>         <city>阜阳</city>         <province>安徽</province>         <postalcode>236000</postalcode>         <country>中国</country>         <telephone>18056075816</telephone> </contact> <contact id="02" type="商务" >         <name>李四</name>         <address>望江西路888号</address>         <city>合肥</city>         <province>安徽</province>         <postalcode>230091</postalcode>         <country>中国</country>         <telephone>13956921922</telephone> </contact> <contact id="03" type="同学" >         <name>王五</name>         <address>民主路3号</address>         <city>贵港市</city>         <province>广西</province>         <postalcode>537111</postalcode>         <country>中国</country>         <telephone>13965131384</telephone> </contact>

</contacts> </address-book>

这样格式的xml我相信大家都会读写,然而如果是下面这种情况呢?

<?xml version="1.0"  encoding="UTF-8"?> <address-book>     <contact id="01" type="家庭" >         <name>张三</name>         <address>黄山路666号</address>         <city>阜阳</city>         <province>安徽</province>         <postalcode>236000</postalcode>         <country>中国</country>         <telephone>18056075816</telephone> </contact> <contact id="02" type="商务" >         <name>李四</name>         <address>望江西路888号</address>         <city>合肥</city>         <province>安徽</province>         <postalcode>230091</postalcode>         <country>中国</country>         <telephone>13956921922</telephone> </contact> <contact id="03" type="同学" >         <name>王五</name>         <address>民主路3号</address>         <city>贵港市</city>         <province>广西</province>         <postalcode>537111</postalcode>         <country>中国</country>         <telephone>13965131384</telephone> </contact> </address-book> 下面我将给出具体的读写和修改的代码:

新建一个Contact.class

import java.io.Serializable;

import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

public class Contact implements Serializable{  @XStreamAsAttribute  private String id;//xml中的属性需要添加注释  @XStreamAsAttribute  private String type;//xml中的属性需要添加注释  private String name;  private String address;  private String city;  private String province;  private String postalcode;  private String country;  private String telephone;

 public String getId() {   return id;  }

 public void setId(String id) {   this.id = id;  }

 public String getType() {   return type;  }

 public void setType(String type) {   this.type = type;  }

 public String getName() {   return name;  }

 public void setName(String name) {   this.name = name;  }

 public String getAddress() {   return address;  }

 public void setAddress(String address) {   this.address = address;  }

 public String getCity() {   return city;  }

 public void setCity(String city) {   this.city = city;  }

 public String getProvince() {   return province;  }

 public void setProvince(String province) {   this.province = province;  }

 public String getPostalcode() {   return postalcode;  }

 public void setPostalcode(String postalcode) {   this.postalcode = postalcode;  }

 public String getCountry() {   return country;  }

 public void setCountry(String country) {   this.country = country;  }

 public String getTelephone() {   return telephone;  }

 public void setTelephone(String telephone) {   this.telephone = telephone;  }

 @Override  public String toString() {   return "id=" + id + ", type=" + type + ", name=" + name + ", address="     + address + ", city=" + city + ", province=" + province     + ", postalcode=" + postalcode + ", country=" + country     + ", telephone=" + telephone;  }

}

新建一个Address.class

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; @XStreamAlias(value="address-book") public class Address { @XStreamImplicit(itemFieldName="contact") private List<Contact> address;

public List<Contact> getAddress() {  return address; }

public void setAddress(List<Contact> address) {  this.address = address; }

}

新建一个Test.class

import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.List; import java.util.Scanner;

import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver;

public class Test { public static void main(String[] args) {  Test t=new Test();  Address address=t.readXml();  System.out.println("输入id编号,从XML文件中查找联系人,联系人信息:");  Scanner sc=new Scanner(System.in);  String line=sc.nextLine();  List<Contact> list=address.getAddress();  for (Contact contact : list) {   if(contact.getId().equals(line)){    System.out.println(contact);   }  }  System.out.println("将编号为02的联系人的姓名和类型修改为用户输入的信息(格式如:赵六,单位),并保存到XML文件中。");  String info=sc.nextLine();  Address add=t.paresInfo(address,info);  t.write(add); } private  Address paresInfo(Address address, String info) {  String[] infos=info.split(",");  List<Contact> list=address.getAddress();  for (Contact contact : list) {   if(contact.getId().equals("02")){    contact.setName(infos[0]);    contact.setType(infos[1]);   }  }  return address; } private  void write(Address address) {  try {   XStream xs=new XStream(new DomDriver());   xs.processAnnotations(Address.class);   OutputStreamWriter osw=new FileWriter(new File("a.xml"));   xs.toXML(address, osw);  } catch (IOException e) {   e.printStackTrace();  } } public Address readXml(){  XStream xs=new XStream(new DomDriver());  xs.processAnnotations(Address.class);  InputStreamReader isr=null;  try {   isr = new FileReader(new File("E:\\workspace\\Day24\\src\\PeopleMessage.xml"));  } catch (FileNotFoundException e) {   e.printStackTrace();  }  Address address=(Address) xs.fromXML(isr);  String xml=xs.toXML(address);  System.out.println(xml);  return address;   } }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏令仔很忙

手把手教你-----巧用Excel批量生成SQL语句,处理大量数据

在做系统或者做项目的时候,经常会遇到这样的要求:用户给我们发过来一些数据,要求我们把这些数据导入到数

483
来自专栏zcqshine's blog

PHP mysqli_multi_query 连续执行的坑

3386
来自专栏张善友的专栏

框架页面尽可以这么用(后置代码中控制框架)

下面是框架页: <%@ Page CodeBehind="Frameset.aspx.cs" Language="c#" AutoEventWireup="...

1746
来自专栏一个会写诗的程序员的博客

Kotlin 全栈开发之 前端 JavaScrip

Kotlin 全栈开发之 前端 JavaScript: Getting Started with Kotlin and JavaScript with Gra...

693
来自专栏深度学习之tensorflow实战篇

SQL:将查询结果插入到另一个表的三种情况

SQL:将查询结果插入到另一个表的三种情况 一:如果要插入目标表不存在: select * into 目标表 from 表 where … 二:如果要插入目标表...

3236
来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:如何在手机上显示类似EXCEL表格

其中包括Height属性(列标题高度)、FontSize属性(列标题文本大小)、BackColor属性(列标题背景颜色)和ForeColor属性(列标题文本颜色...

923
来自专栏web编程技术分享

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第九节)

2466
来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现表单设计

其中包括Height属性(列标题高度)、FontSize属性(列标题文本大小)、BackColor属性(列标题背景颜色)和ForeColor属性(列标题文本颜色...

761
来自专栏别先生

根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程

注意:自己的数据表表名称,切记手动修改,字段名称(特别注意id,parent_id字段名称,不然肯定查询不出来的)。

713
来自专栏IMWeb前端团队

编写graphql服务

graphql用一种高效清晰的规范来替代目前正流行的RESTful架构。通过灵活的结构化查询语言让查询更高效,静态类型和规范提升前后端联调效率。作为一名前端我非...

1928

扫码关注云+社区