我是简单XML的新手,但是我遇到了内部元素中不需要的对象填充的问题。
实际问题是我想要这个层次结构:
<Request>
<SpecificRequest>
<UniqueID></UniqueID>
or
<Password></Password>
</SpecificRequest>
</Request>
但是有这个:
<Request>
<SpecificRequest>
<mData class="com.example.package.UIDData">
<UniqueID>6252859A</UniqueID>
</mData>
</SpecificRequest >
</Request>
类如下所示:
根请求对象:
@Root(name = "Request")
public class Request {
@Element(name = "SpecificRequest")
private SpecificRequest mSpecificRequest;
public Request(SpecificRequest specificRequest) {
mSpecificRequest = specificRequest;
}
}
具体请求对象:
public class SpecificRequest {
private Data mData;
public SpecificRequest(Data data) {
mData = data;
}
}
通用数据类:
public abstract class Data {
private Type mType = Type.None;
protected Data(Type type) {
mType = type;
}
// other abstract stuff
}
和具体数据类:
public class UIDData extends Data {
@Element(name = "UniqueID")
private String mUID;
public UIDData(String UID) {
super(Type.UID);
mUID = UID;
}
}
附言这不是这个或这个的重复。
添加 UIDData.class 作为 SimpleXml 中的类型 @Element
注释public class TestClass {
private String getXmlBody(Object o, Matcher matcher) throws Exception {
Format format = new Format(4, "<?xml version="1.0" encoding="UTF-8" standalone="yes"?>");
Serializer serializer = new Persister(new AnnotationStrategy(), matcher, format);
Writer writer = new StringWriter();
serializer.write(o, writer);
writer.write('n');
return writer.toString();
}
public static void main(String[] args) throws Exception {
Data data = new UIDData("some UUID value ");
SpecificRequest specificRequest = new SpecificRequest(data);
Request request = new Request(specificRequest);
System.out.println(getXmlBody(request, new RegistryMatcher()));
}
}
@Root(name = "Request")
class Request {
@Element(name = "SpecificRequest")
private SpecificRequest mSpecificRequest;
public Request(SpecificRequest specificRequest) {
mSpecificRequest = specificRequest;
}
}
class SpecificRequest {
@Element(type = UIDData.class)
private Data mData;
public SpecificRequest(Data data) {
mData = data;
}
}
abstract class Data {
private String mType = "";
protected Data(String type) {
mType = type;
}
// other abstract stuff
}
class UIDData extends Data {
@Element(name = "UniqueID")
private String mUID;
public UIDData(String UID) {
super("UID");
mUID = UID;
}
}