2

私はxstreamを使用して、一部のXMLをJavaオブジェクトに変換しています。XMLパターンは次の形式です。

<Objects>   
<Object Type="System.Tuning" >4456</Object> 
<Object Type="System.Lag" >7789</Object>    
</Objects>

基本的に、親Objectsタグはn個のObjectタグを持つことができます。このために、私は次のようにクラスをモデル化しました。

class ParentResponseObject {    
    List <ResponseObject>responseObjects = new ArrayList<ResponseObject>();
    public ParentResponseObject() {
        // TODO Auto-generated constructor stub
    }
}
class ResponseObject {
       String Type;
       String Value;
    public ResponseObject() {

    }
}

そして最後に、以下のコードを使用してJavaクラスにデータを入力しています。

XStream s = new XStream(new DomDriver());
  s.alias("Objects", src.core.PowerShell.MyAgain.ParentResponseObject.class);
  s.alias("Object", src.core.PowerShell.MyAgain.ResponseObject.class);  
  s.useAttributeFor(src.core.PowerShell.MyAgain.ResponseObject.class, "Type");  
        s.addImplicitCollection(src.core.PowerShell.MyAgain.ParentResponseObject.class, "responseObjects");     
        ParentResponseObject gh =(ParentResponseObject)s.fromXML(k1);

このuseAttributeメソッドを使用すると、オブジェクトタイプの「Type」属性を読み取ることができますが、4456、7789などのタグ内の値を読み取り、変数.valueに入力するにはどうすればよいですかResponseObject

4

1 に答える 1

2

を使用する必要がありますToAttributedValueConverter。以下に示すように、xstreamアノテーションを使用してこれを行うのは簡単です。

@XStreamAlias("Object")
@XStreamConverter(value = ToAttributedValueConverter.class, strings = { "value" })
public class ResponseObject {

    @XStreamAlias("Type")
    private String type;

    private String value;

    public ResponseObject() {
    }

    public String getType() {
        return type;
    }

    public String getValue() {
        return value;
    }
}

@XStreamAlias("Objects")
public class ParentResponseObject {

    @XStreamImplicit
    private final List <ResponseObject> responseObjects = new ArrayList<ResponseObject>();

    public ParentResponseObject() {
    }

    public List<ResponseObject> getResponseObjects() {
        return responseObjects;
    }
}

主な方法:

XStream xStream = new XStream();
xStream.processAnnotations(ParentResponseObject.class);
ParentResponseObject parent = (ParentResponseObject)xStream.fromXML(file);
for (ResponseObject o : parent.getResponseObjects()) {
    System.out.println(o.getType() + ":" + o.getValue());
}
于 2012-10-01T12:05:50.853 に答える