首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单XML序列化+构建器模式

简单XML序列化+构建器模式
EN

Stack Overflow用户
提问于 2016-10-06 18:18:58
回答 1查看 668关注 0票数 0

我在构造函数中有一个带有10+参数的类,我想实现一个生成器模式。同时,我希望使用简单的XML序列化从XML文件构建对象。有什么方法可以做到这一点吗?

代码语言:javascript
复制
import org.simpleframework.xml.*;

public class Example {

    @Element(name = "field-1", required = false)
    private final int field1;
    @Element(name = "field-2")
    private final int field2;
    [...]

    public simpleXMLConstructor(
            @Element(name = "field-1", required = false) int field1,
            @Element(name = "field-2") int field2,
            [...]) {
        this.field1 = field1;
        this.field2 = field2;
        [...]
    }

}
EN

回答 1

Stack Overflow用户

发布于 2016-10-09 13:30:07

据我所知,对于任何XML库,您都没有任何特定的选择。我推荐使用GitHub上提供的Scilca XML Progression (SXP)包。为了编写对象序列化的代码(您知道要创建哪个对象),下面是一个简单的实现,

代码语言:javascript
复制
import org.scilca.sxp.*; 
import org.scilca.sxp.exceptions.*;

public class main{
    class XmlSerialization{.....} // We'll serialize this and
    class XmlS2 {}

    public static void main(String[] args){
        // Write Data
        Node rootNode = new XMLNode("ObjectSerializationData");

        XMLNode firstObject = rootNode.add("XmlSerialization");
        firstObject.add("IntField1").setValue("1");
        firstObject.add("StringField2").setValue("strObject");

        XMLNode secondObject = rootNode.add("XmlS2");
        secondObject.add("IntField1").setValue("2"); // Added a element with a value
        secondObject.add("BoolField2").setValue("false");

        XMLNode thirdObject = rootNode.add("XmlSerialization");
        thirdObject.add("IntField1").setValue("@null");
        thirdObject.add("StringField2").setValue("str");

        Document XmlDocument = new Document(rootNode);
        Writer w = (Writer) XmlDocument.getWriter();
        w.saveXML("D:/file.txt");

        System.gc();

        // Read and Deserialize

        XMLReader xr = new XMLReader("D:/file.txt");
        Document newXml = xr.parseDocument();

        List<Node> XmlS1Nodes = newXml.searchMatches("XmlSerialization");
        List<Node> XmlS2Nodes = newXml.searchMatches("XmlS2");


        Node firstObject = XmlS1Nodes.get(0);
        int field1 = (int) Double.parseDouble(firstObject.getAllChildren().get(0));

        // Like this get all field and construct objects

        }

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39893412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档