我是简单 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;
}
}
最佳答案
在 SimpleXml @Element 注解中添加 UIDData.class 作为类型
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;
}
}
关于Java SimpleXML 使用类属性填充内部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38375600/