У меня есть вопрос, касающийся подхода к преобразованию XML из одного формата в другой.
Я работаю над задачей, в рамках которой я беру сериализованные данные из объекта, над которым у меня нет контроля.Я сгенерировал объект для этого XML.Давайте назовем это «экземпляром формы».Экземпляр формы очень сложен с вложением и множеством несоответствующих компонентов макета и вложением, которые, насколько я понимаю, затрудняют использование XSLT для этого.
Мне нужно взять экземпляр формы и присвоить ему свойства - значениямв другом объекте.Позволяет назвать другой объект «Стандартный формат».Объект стандартного формата сериализует себя в формат, который мне нужен, чтобы в конечном итоге добраться до него.
Экземпляр формы - это полученная в результате сериализация от пользователя, заполняющего форму.Это «определение» формы может быть изменено в любое время, и что-то столь же простое, как изменение макета в форме, полностью меняет структуру вложенности получаемой сериализации. Что является последовательным, так это то, что где-то в элементах сериализации представлены элементы управления, из которых мне нужны значения - и яхочу настроить, из каких я хочу получить значения.
Я создаю свой собственный XML-файл конфигурации, который позволит указать, какие элементы управления из экземпляра формы, которые я хочу в конечном итоге загрузить в «Стандартный формат»"object.
Экземпляр формы структурирован следующим образом:
<Form name="MainForm">
<Control type="GroupHeader">
<Control type="GroupHeader">
<Control type="text" name="FirstName"/>
<Control type="text" name="LastName"/>
</Control>
<Control type="Radio" name="Gender"/>
</Control>
<Control>
<Form name="SomeOtherSubForm">
<Control type="text" name="AnotherPersonFirstName"/>
<Control type="text" name="AnotherPersonLastName"/>
</Form>
</Control>
</Form>
Как вы можете видеть, я действительно не возражаю против того, где существуют поля в экземпляре формы (и он может измениться в любое время, если кто-тоудаляет заголовок группы или добавляет новый макет), поскольку я могу получить к ним рекурсивную информацию, если создам файл конфигурации с именем элемента управления.
Я хотел бы сделать свой «Файл конфигурации» повторно используемымдостаточно в том смысле, что - когда данные добавляются в «экземпляр формы»- можно внести корректировку в мой файл конфигурации, сказав: «Теперь я хочу этот другой элемент управления, который был добавлен в определение формы», который запишет его в «Стандартный формат».Кроме того, окончательный вывод, который я бы хотел настроить из этого файла.
Сериализация в объекте «Стандартный формат» дает мне то, что мне нужно - если я работаю с ним так, как яЯ пытаюсь в конечном итоге (это гибкий).Однако мне интересно, как я могу сделать так, чтобы размещение данных моего экземпляра формы в этот объект - настраивалось.Если я работаю с ним как с объектом, то, когда нужно изменить формат получаемой сериализации, мне нужно изменить код.
Я ошибаюсь, полагая, что, поскольку я знаю, что выводит объект "Стандартный формат", этоЯ могу создать токеноподобный раздел конфигурации в моем «Конфигурационном файле», чтобы указать спецификацию формата?
Например: в моем «Экземпляре формы» у меня есть как минимум 2 поля, которые я хочу в конечном итогепредставили, в каком сериализуется «Стандартный формат».Эти 2 поля могут изменить положение / вложенность в сериализации «Form Instance» в любое время, если кто-то изменит определение базовой формы, которая определена.
Так как наша цель - не работать с объектом Standard Format, а завершитьв дополнение к тому, что он сериализует, могу ли я вырезать объект и просто смоделировать его в соответствии с желаемым XML.Например, это то, что выдает стандартный формат, если я добавлю к нему объект «Person».
<StandardFormat>
<Person Gender="M">
<Name>
<First>Joe</First>
<Last>Smith</Last>
</Name>
</Person>
</StandardFormat>
Будет ли правильным сделать файл конфигурации XML следующим образом:
<FormInstanceOutputConfiguration>
<Control id="FirstName" type="TextField">
<Control id="LastName" type="TextField">
<Control id="Gender" type="Radio">
<CustomOutputTemplate>
<Person Gender="[Gender]">
<Name>
<First>[FirstName]</First>
<Last>[LastName]</Last>
</Name>
</Person>
</CustomOutputTemplate>
</FormInstanceOutputConfiguration>
Требуемый выходной сигнал можно изменить без необходимости изменения модели «Стандартный формат».Если Person в этом случае считался актером, он может идти в «» в стандартном объекте формата, или он может быть вложен в что-то еще, например «».У меня есть несколько форм, но все «элементы управления» в каждой форме будут иметь одинаковый вывод.Так что в этом случае основная форма будет иметь кучу разных людей, которые должны выходить в одном и том же формате.
Так что плохо, если я обойду объект стандартного формата, если в конечном итоге все, что нам нужно, этовыход сериализации?
Спасибо за любые идеи.