XML文件如下:
<Order>
<Status Id="123">abc</Status>
</Order>
Status节点就是一个既有属性又有值的节点。
Maven配置:
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</dependency>
测试:
package org.xstream;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class AppTest {
static String xml = "<Order><Status Id=\"123\">abc</Status></Order>";
public static void main(String[] args) {
XStream xstream = new XStream();
xstream.alias("Order", Order.class);
xstream.registerConverter(new Converter() {
@Override
public boolean canConvert(Class type) {
return type.equals(Status.class);
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Status s = new Status();
s.setId(reader.getAttribute("Id"));
s.setContent(reader.getValue());
return s;
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
Status status = (Status) source;
writer.addAttribute("Id", status.getId());
writer.setValue(status.getContent());
}
});
Order order = (Order) xstream.fromXML(xml);
System.out.println("-----反序列化-----");
System.out.println(order);
System.out.println("----序列化-----");
System.out.println(xstream.toXML(order));
}
}
class Order {
private Status Status;
public Status getStatus() {
return Status;
}
public void setStatus(Status status) {
Status = status;
}
@Override
public String toString() {
return "Order [Status=" + Status + "]";
}
}
class Status {
private String Id;
private String content;
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Status [Id=" + Id + ", content=" + content + "]";
}
}
输出结果:
-----反序列化-----
Order [Status=Status [Id=123, content=abc]]
----序列化-----
<Order>
<Status Id="123">abc</Status>
</Order>