У меня есть 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-файл, я создал своего рода граф объектов. Каждый основной тег представлен классом. Например,
Класс MainTag будет иметь ссылку на классы Tag1 и Tag3. Класс Tag1 будет иметь ссылку на подкласс SubTag1, Tag2 и т. Д. Кроме того, каждый класс реализует интерфейс IXmlSerializable, который делает запись XML-файла довольно простой и красивой. Разделение классов также помогает, если структура XML изменяется.
Вопросы:
1) Является ли подход правильно разделить структуру XML в набор классов?
2) Поскольку у меня много классов, я должен инициализировать всю структуру класса (графа объектов). Когда данные (которые я хочу вставить в xml) готовы, я хочу начать инициализацию всего графа объектов. После инициализации я просто хочу написать XML, используя интерфейс IXmlSerializable. Есть ли какой-либо шаблон проектирования для типа инициализации объекта, который я использую? В настоящее время я просто делаю следующее. Это выглядит странно.
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
}
}
Не является составным рисунком для отношений между объектами? –
Вы предлагаете, что для каждого XMLTag я создаю класс. Затем создайте другой класс, который будет действовать как родительский, называемый CompositeXMLTag. Но в соответствии с композитным рисунком, какой класс будет действовать как лист? –
Я предполагаю, что вы можете вставлять subtags в каждый тэг, который у вас есть, если это так, у вас будут только составные классы, а не листья. Если, например, SubTag1_1 и SubTag1_2 не принимают дочерние элементы, они будут классами листа. –