Java SimpleXML 使用类属性填充内部对象

标签 java android xml simple-framework

我是简单 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;
    }
}

附言这不是 this 的重复或 this .

最佳答案

在 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/

相关文章:

android - 在Android中授予应用程序权限时是否有可能获得回调

python - 如何使用 python 中的现有文本文件添加 XML 标记新文件?

javascript - 在 Firefox 中查看带有表单的 PDF

java - 处理 Applet 抛出 java.lang.ExceptionInInitializerError 并阻止其运行

android - Viewflipper - 垂直 slider

android - 手机间隙 : Contact list Sorting

c# - 如何在 xml 数据的 linq 查询中使用 TryParse?

c# - 找不到类型或命名空间名称(XAML 新增功能)

java - 检测对表单控件中文本的所有更改(由用户进行)

java - Android Studio RecyclerView 在滚动图像时严重滞后