C# 创建基于XSD生成XML的表单的智能方法

C# 创建基于XSD生成XML的表单的智能方法,c#,xml,winforms,user-interface,C#,Xml,Winforms,User Interface,我希望在表单(WinForms)上显示基于XSD或DTD的动态控件生成,用户可以填充值,可能主要是文本框,这些文本框将填充属性数据并创建要插入到现有XML文件中的合法XML片段 这是可行的吗?以前有人做过这种事情吗?如果是的话,你用了什么样的设计 下面是XSD的一个示例: <xs:element name="layer-config"> <xs:complexType> <xs:choice maxOccurs="unbounded">

我希望在表单(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文件进行严格的硬编码,以防它被删除或更改为其他内容—然后您必须重新编码和重新编译整个过程,然后重新开始。对于终端用户来说,它也不是那么容易维护。

是的,这是可行的。以下是几点建议:

  • 您可以使用LinqToXML读取定义文件(XSD),其中包含重要属性(类型、用途等)
  • 有了定义,您应该实现一个负责创建字段的类
    • 此类必须有一个方法,该方法使用重要属性基于一个定义创建一个字段
    • 此类必须能够根据定义中的元素分组正确地对字段进行分组
  • 您必须决定使用何种定位方法。定义文件中没有定位信息,您也没有报告这是否是WinForms、WebForms、Silverlight等