JavaSimpleXML用class属性填充内部对象
我不熟悉简单的XML,但我遇到了在内部元素中填充不需要的对象的问题 实际问题是,我希望有这样的层次结构:JavaSimpleXML用class属性填充内部对象,java,android,xml,simple-framework,Java,Android,Xml,Simple Framework,我不熟悉简单的XML,但我遇到了在内部元素中填充不需要的对象的问题 实际问题是,我希望有这样的层次结构: <Request> <SpecificRequest> <UniqueID></UniqueID> or <Password></Password> </SpecificRequest> </Request> 特定请求
<Request>
<SpecificRequest>
<UniqueID></UniqueID>
or
<Password></Password>
</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;
}
}
和特定数据类:
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;
}
}
公共类TestClass{
私有字符串getXmlBody(对象o,匹配器匹配器)引发异常{
格式=新格式(4“”);
Serializer Serializer=新的持久化器(新的AnnotationStrategy(),匹配器,格式);
Writer-Writer=新的StringWriter();
serializer.write(o,writer);
writer.write('\n');
返回writer.toString();
}
公共静态void main(字符串[]args)引发异常{
数据=新UIDData(“某些UUID值”);
SpecificRequest SpecificRequest=新的SpecificRequest(数据);
请求=新请求(特定请求);
System.out.println(getXmlBody(request,newregistrymatcher());
}
}
@Root(name=“请求”)
类请求{
@元素(name=“SpecificRequest”)
私人专用请求MSSpecificRequest;
公共请求(特定请求特定请求){
msSpecificRequest=specificRequest;
}
}
类特定请求{
@元素(类型=UIDData.class)
私有数据;
公共特定请求(数据){
mData=数据;
}
}
抽象类数据{
私有字符串mType=“”;
受保护数据(字符串类型){
mType=类型;
}
//其他抽象的东西
}
类UIDData扩展数据{
@元素(name=“UniqueID”)
私有字符串mUID;
公共UIDData(字符串UID){
超级("UID);;
mUID=UID;
}
}