繁体   English   中英

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

[英]Simple XML Serialization + Builder pattern

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

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;
        [...]
    }

}

据我了解,您没有任何针对XML库的特定选择。 我建议使用GitHub上的Scilca XML Progression(SXP)软件包。 要编写用于对象序列化的代码(您知道要创建哪个对象),这是一个简单的实现,

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

        }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM