I am working with xstream to convert some XML into Java objects. The XML pattern is of the below format:
<Objects>
<Object Type="System.Tuning" >4456</Object>
<Object Type="System.Lag" >7789</Object>
</Objects>
Basically the parent Objects tag can have n number of Object tags. For this I have modelled my class like this:
class ParentResponseObject {
List <ResponseObject>responseObjects = new ArrayList<ResponseObject>();
public ParentResponseObject() {
// TODO Auto-generated constructor stub
}
}
class ResponseObject {
String Type;
String Value;
public ResponseObject() {
}
}
And finally I am using the below code to populate my java class:
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);
Using the useAttribute method I am able to read the “Type” attribute of Object Type, but how do I read the values within tags like 4456, 7789 and populate it in the variable ResponseObject.value.
You need to use the
ToAttributedValueConverter. It is easy to do this using xstream annotations as shown below:Main method: