XStream处理既有属性又有值的xml节点

前端之家收集整理的这篇文章主要介绍了XStream处理既有属性又有值的xml节点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML文件如下:

  1. <Order>
  2. <Status Id="123">abc</Status>
  3. </Order>
Status节点就是一个既有属性又有值的节点。


Maven配置:

  1. <dependency>
  2. <groupId>com.thoughtworks.xstream</groupId>
  3. <artifactId>xstream</artifactId>
  4. <version>1.4.7</version>
  5. </dependency>
测试:
  1. package org.xstream;
  2.  
  3. import com.thoughtworks.xstream.XStream;
  4. import com.thoughtworks.xstream.converters.Converter;
  5. import com.thoughtworks.xstream.converters.MarshallingContext;
  6. import com.thoughtworks.xstream.converters.UnmarshallingContext;
  7. import com.thoughtworks.xstream.io.HierarchicalStreamReader;
  8. import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
  9.  
  10. public class AppTest {
  11. static String xml = "<Order><Status Id=\"123\">abc</Status></Order>";
  12.  
  13. public static void main(String[] args) {
  14. XStream xstream = new XStream();
  15. xstream.alias("Order",Order.class);
  16. xstream.registerConverter(new Converter() {
  17.  
  18. @Override
  19. public boolean canConvert(Class type) {
  20. return type.equals(Status.class);
  21. }
  22.  
  23. @Override
  24. public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
  25. Status s = new Status();
  26. s.setId(reader.getAttribute("Id"));
  27. s.setContent(reader.getValue());
  28. return s;
  29. }
  30.  
  31. @Override
  32. public void marshal(Object source,HierarchicalStreamWriter writer,MarshallingContext context) {
  33. Status status = (Status) source;
  34. writer.addAttribute("Id",status.getId());
  35. writer.setValue(status.getContent());
  36. }
  37. });
  38. Order order = (Order) xstream.fromXML(xml);
  39. System.out.println("-----反序列化-----");
  40. System.out.println(order);
  41. System.out.println("----序列化-----");
  42. System.out.println(xstream.toXML(order));
  43. }
  44. }
  45.  
  46. class Order {
  47. private Status Status;
  48.  
  49. public Status getStatus() {
  50. return Status;
  51. }
  52.  
  53. public void setStatus(Status status) {
  54. Status = status;
  55. }
  56.  
  57. @Override
  58. public String toString() {
  59. return "Order [Status=" + Status + "]";
  60. }
  61.  
  62. }
  63.  
  64. class Status {
  65. private String Id;
  66. private String content;
  67.  
  68. public String getId() {
  69. return Id;
  70. }
  71.  
  72. public void setId(String id) {
  73. Id = id;
  74. }
  75.  
  76. public String getContent() {
  77. return content;
  78. }
  79.  
  80. public void setContent(String content) {
  81. this.content = content;
  82. }
  83.  
  84. @Override
  85. public String toString() {
  86. return "Status [Id=" + Id + ",content=" + content + "]";
  87. }
  88.  
  89. }

输出结果:

  1. -----反序列化-----
  2. Order [Status=Status [Id=123,content=abc]]
  3. ----序列化-----
  4. <Order>
  5. <Status Id="123">abc</Status>
  6. </Order>

猜你在找的XML相关文章