Умный способ создать форму для генерации XML на основе XSD - PullRequest
2 голосов
/ 17 июня 2011

Я хочу, чтобы в форме (WinForms) отображалось некоторое динамическое создание элемента управления на основе XSD или DTD, и пользователь мог заполнять значения, вероятно, в основном текстовыми полями, которые будут заполнять данные атрибутов и создавать допустимые фрагменты XML длявставлен в уже существующий XML-файл.

Это выполнимо - кто-нибудь делал подобные вещи раньше - если да, то какой тип дизайна вы использовали?

Ниже приведен пример XSD:

 <xs:element name="layer-config">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="dynamic-feature-layer"/>
        <xs:element ref="dynamic-image-layer"/>
        <xs:element ref="folder"/>  
        <xs:element ref="layer"/>
        <xs:element ref="wms-layer"/>
      </xs:choice>
      <xs:attribute name="upload-can-drill-identify" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-extract-excel" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-extract-gml" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-extract-kml" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-find-by-attribute" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-hide-labels" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-identify" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-select" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-select-by-attribute" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-symbolize" type="BOOLEAN_TYPE" use="optional" default="true"/>
      <xs:attribute name="upload-can-symbolize-by-attribute" type="BOOLEAN_TYPE" use="optional" default="true"/>
    </xs:complexType>
  </xs:element>

Я думаю об этом, потому что я не хочу жестко кодировать жесткий код в уже существующем XML-файле на случай, если он будет удален или заменен на что-то другое - тогда вам придется перекодировать и перекомпилироватьвсе это и начать снова.Это также не очень удобно для конечных пользователей.

1 Ответ

1 голос
/ 17 июня 2011

Да, это выполнимо. Вот несколько указателей:

  • Вы можете использовать LinqToXML для чтения файла определения (XSD) с важными свойствами (тип, использование и т. Д.)
  • Имея ваши определения в ваших руках, вы должны реализовать класс, отвечающий за создание полей
    • В этом классе должен быть один метод, который создает одно поле на основе одного определения с использованием важных свойств
    • Этот класс должен уметь правильно группировать поля в соответствии с группировкой элементов в определениях
  • Вы должны решить, какой подход использовать в отношении позиционирования. В файле определения нет информации о позиционировании, и вы не сообщили, является ли это WinForms, WebForms, Silverlight и т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...