c# - 基于 XSD 创建表单生成 XML 的智能方式

标签 c# xml winforms user-interface

我想要一些基于 XSD 或 DTD 的动态控件生成显示在表单 (WinForms) 上,并且用户可以填写值,可能主要是将填写属性数据并创建合法的 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等。

关于c# - 基于 XSD 创建表单生成 XML 的智能方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386830/

相关文章:

c# - 带有十进制数字的蒙面文本框

c# - 使用 XDocument.Validate 验证 Xml 架构时,XmlSchemaValidationException.LineNumber 和 LinePosition 为 0

c# - 将记录写入数据库并且仅输入每个字段的第一个字符

c# - 当外部应用程序的窗口移动时移动窗口

c# - .Net Toolstrip/MenuStrip 焦点问题

c# - C# 中的 Dllimport 来自

c# - Orleans 应用程序如何从容器中获益?

c# - 将 MVC DropDownlistFor() 绑定(bind)到模型的导航属性

c# - 如何在 C# 中设置命名空间 URI?

xmlstarlet:通过位置号选择元素