Напишите xml-файл с элементами в зависимости от типа выполняемого действия

Мне нужно выразить в xml список действий, которые может выполнять моя программа. Проблема в том, что некоторые действия требуют дополнительных элементов, а другие нет. Например, если моя программа должна выполнять действия с файлами: если я удаляю единственное, что меня интересует, это путь, если программа выполняет копирование ... снова мне нужен путь, но также и путь назначения .. Как сделать написать XML-файл с такой структурой?


person Hiro    schedule 17.01.2011    source источник


Ответы (1)


Что-то вроде этого?

<actions>
  <action name="FileCopy">
    <params>
      <param name="SourcePath" value="c:\source.txt"/>
      <param name="DestPath" value="c:\dest.txt"/>
    </params>
  </action>
  <action name="FileDelete">
    <params>
      <param name="DeletePath" value="c:\source.txt"/>
    </params>
  </action>
  <action name="ReloadCache"/>
  <action name="Alert">
   <params>
     <param name="Message" value="Done!"/>
   </params>
  </action>
</actions>

Конечно, вы можете удалить уровень params и поместить теги param непосредственно под тегом action, однако предлагаемая структура позволит добавлять другие типы узлов под тегом action (например, обратные вызовы проверки), не нарушая слишком много вещей.

person Maxim Gueivandov    schedule 17.01.2011
comment
Хотя приведенный выше пример работает как есть, он может не стать полностью гибким в будущем. Это очень спорная тема, но многие рекомендуют ограничивать атрибуты метаданными, касающимися содержимого элемента, а не данными значений: например: ´ ‹единицы веса = кг› 75 ‹/weight› ´ Подробнее см. В этом сообщении. обсуждение: stackoverflow.com/questions / 521454 / - person James Walford; 17.01.2011
comment
@James: по крайней мере, так структурированы стандартные разделы .NET appSettings conf (<add key="..." value="..."/>). - person Maxim Gueivandov; 18.01.2011
comment
правда, хотя это не обязательно считается хорошей поддержкой :-) В любом случае это не совсем обсуждение, а просто общее наблюдение, так что +1 за рабочий ответ. - person James Walford; 18.01.2011