我有一个结构复杂的XML文件。以下只是一个小样本。
<MainTag>
<Tag1 name="">
<SubTag1_1 msgType="">
<SubTag1_2 storeId="abc" abc=""/>
</Tag1>
<Tag2 msgType="">
<SubTag2_1 name="" cap="" value="#"/>
<SubTag2_2=""/>
</Tag2>
</Tag1>
<Tag3 name="">
<SubTag3>
<SubTag3_1 msgType="A" value="1">
<SubSubTag3 name="" xml="" sap="" time_delta="0" time_absolute="2"/>
<SubSubTag3 name="" xml="" sap="" type="transmit" time_delta="5" time_absolute="2"/>
</SubTag3_1 >
<SubTag3_2 msgType="" value="1">
<SubSubTag3 name="" xml="" sap="" type="receive" time_delta="0" time_absolute="2"/>
</SubTag3_2>
</SubTag3>
</Tag3>
</MainTag>
我必须为不同的数据集多次创建上述XML文件。我没有使用单个类来获取所有数据并编写XML文件,而是创建了一种对象图。每个主标签由一个类表示。例如
Class MainTag将引用类Tag1和Tag3。 Tag1类将引用子类SubTag1,Tag2等。此外,每个类都实现了IXmlSerializable接口,这使得编写XML文件非常容易并且很好地划分。如果更改XML结构,划分类也会有所帮助。
问题:
1)方法是否正确将XML结构划分为一组类?
2)由于我有很多类,我必须初始化所有类结构(对象图)。一旦数据(我想在xml中插入)准备就绪,我想开始整个对象图的初始化。初始化完成后,我只想使用IXmlSerializable接口编写XML。是否有任何设计模式用于我正在使用的对象初始化类型?目前,我正在做以下事情。这看起来很奇怪。
class MainTag: XmlBase
{
List<Tag1> Tag1List{ get; set; }
Tag1 t;
public MainTag() : base()
{
t = new Tag1();
//Do processing and populate the properties of MainTag
}
}
class Tag1 : XmlBase
{
List<SubTag1_1> subtags;
SubTag1_1 s;
public Tag1()
{
s = new SubTag1_1();
//Do processing and populate the properties of Tag1
}
}
答案 0 :(得分:0)
您可以使用复合图案
我不是c#开发人员,但你可以为你拥有的每个标记类型创建一个XMLTag类,并从一个继承XMLTag的CompositeXMLTag聚合XMLTag对象。
然后为标记树的初始化
创建一个类有关复合模式http://www.codeproject.com/Articles/185797/Composite-Design-Pattern
的详细信息 编辑:我不是c#开发人员,所以这是一个java示例public interface CompositeXMLTag {
public void addTag(CompositeXMLTag tag);
public void serialize();
}
public class Tag1 implements CompositeXMLTag {
private List<CompositeXMLTag> tags = new ArrayList<CompositeXMLTag>();
private String name;
/* getters and setters */
@Override
public void addTag(CompositeXMLTag tag) {
this.tags.add(tag);
}
@Override
public void serialize() {
for (CompositeXMLTag compositeXMLTag : tags) {
compositeXMLTag.serialize();
}
}
}
public class SubTag1_1 implements CompositeXMLTag{
private List<CompositeXMLTag> tags = new ArrayList<CompositeXMLTag>();
private String storeId;
private String abc;
/* getters and setters */
@Override
public void addTag(CompositeXMLTag tag) {
this.tags.add(tag);
}
@Override
public void serialize() {
for (CompositeXMLTag compositeXMLTag : tags) {
compositeXMLTag.serialize();
}
}
}
public class Client {
public static void main(String[] args) {
CompositeXMLTag tag1 = new Tag1();
tag1.addTag(new SubTag1_1());
tag1.serialize();
}
}