<?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;
}
}