Я хочу, чтобы в форме (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-файле на случай, если он будет удален или заменен на что-то другое - тогда вам придется перекодировать и перекомпилироватьвсе это и начать снова.Это также не очень удобно для конечных пользователей.