java - xstream 中的映射属性

标签 java xml xstream

我有这样的 XML:

<qualification name="access">
    <attribute name="abc">OK</attribute>
    <attribute name="res">OK 2</attribute>
    <requesturi>http://stackoverflow.com</requesturi>
</qualification>

类是:

public class Qualification {
  @XStreamAsAttribute
  private String name;

  private String requesturi;
}

如何映射 <attribute name="abc">OK</attribute>

最佳答案

编写属性转换器后。问题解决了。

package com.xstream;

import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

public class Attribute {

  @XStreamAsAttribute
  private String name;

  private String value;

  public Attribute(String name, String value) {
    this.name = name;
    this.value = value;
  }

  /**
   * @return the name
   */
  public String getName() {
    return name;
  }

  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }

  /**
   * @return the value
   */
  public String getValue() {
    return value;
  }

  /**
   * @param value the value to set
   */
  public void setValue(String value) {
    this.value = value;
  }

  /* (non-Javadoc)
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return "Attribute [name=" + name + ", value=" + value + "]";
  }

}

AttributeConverter 类是:

package com.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 AttributeConverter implements Converter{

  @Override
  public boolean canConvert(Class clazz) {
    return clazz.equals(Attribute.class);
  }

  @Override
  public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingContext context) {
    System.out.println("object = " + object.toString());
    Attribute attribute = (Attribute) object;
    writer.addAttribute("name", attribute.getName());  
    writer.setValue(attribute.getValue());  

  }

  @Override
  public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
    return new Attribute(reader.getAttribute("name"), reader.getValue());

  } 

}

在 Qualification 类中使用它作为:

  @XStreamConverter(AttributeConverter.class)
  private Attribute attribute;

在主类中注册转换器为:

xstream.registerConverter(new AttributeConverter());

关于java - xstream 中的映射属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894318/

相关文章:

java - Hibernate xml 映射列表按日期排序

Java:将 int 转换为 InetAddress

java - Camera2API : Session has been closed; further changes are illegal

xml - AIX 中最简单的嵌套 XML 解析

android - Xstream 模棱两可的 xml 标签

java - 如果多个转换器可以解码 xml,会发生什么情况?

java - XStream XmlPullParserException

java - 带有多个文件的 Spring 3 @ImportResource

javascript - 如何从 HTMLUnit 中的 Javascript 链接下载文件

xml - 多个文件输入?