XML文件如下:
Status节点就是一个既有属性又有值的节点。
- <Order>
- <Status Id="123">abc</Status>
- </Order>
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>