【问题标题】:Automatically attach XML files to XSD schema in Visual Studio?在 Visual Studio 中自动将 XML 文件附加到 XSD 架构?
【发布时间】:2010-12-30 14:57:12
【问题描述】:

我刚刚发现了 Visual Studio 自动生成 XSD 架构的美妙之处。*

有没有一种简单的方法可以让 VS 自动将具有特定名称的文件附加到现有的 XSD 架构?因此,如果我将myconfig.xml 文件分散在一个项目(或多个项目)中,我希望它们始终针对myconfig.xsd 进行验证,而不是必须打开每个 XML 文件并手动关联它。这可能吗?

* 对于不熟悉的人:打开 XML 文件、XML/创建架构和 它创建了一个很好的模式文件,基于 它在您的 XML 文件中看到的内容。你可以 然后将相同的 XSD 附加到另一个 XML 文件通过打开该文件和 选择 XML/Schemas 并选择 项目中的适当架构。然后,您可以对所有元素和属性名称、所需元素和属性等进行智能感知和验证。


更新:我想我不是很清楚。

当我在项目的任何位置创建新的web.config 文件时,我不会手动为其分配架构。 XML 中没有指定命名空间。不过 Visual Studio 自动知道使用DotNetConfig.xsd

大概 Visual Studio 在某处有一个映射,将名为 web.config 的文件分配给 DotNetConfig.xsd

现在,假设我希望所有名为 DbSchema.xml 的文件自动使用我创建的名为 DbSchema.xsd 的架构。有没有办法做到这一点?

【问题讨论】:

  • 你有没有想过这个问题?如果有,请分享。

标签: xml visual-studio xsd


【解决方案1】:

任何 XML 文档中的任何标记都可以引用模式。

查看示例:http://msdn.microsoft.com/en-us/library/ms757863(VS.85).aspx

【讨论】:

    【解决方案2】:

    如果您的架构与您的 XML 文件位于同一工作区(不一定是项目),只要您的文件具有命名空间声明,Visual Studio 就会自动使用它们进行自动完成和验证。

    您甚至不需要输入 schemaLocation 属性。

    尝试以下方法:

    • 双击 XML 文件将其打开
    • 在现在动态显示的菜单项“XML”中,单击“Schemas...”。这将显示从命名空间到架构的当前映射。

    要检查它是否正常工作,请尝试在某处放置一个开放的尖括号,它应该建议元素名称。

    编辑:这也适用于没有命名空间的 XML 文件,但是您可能必须将新的模式目录添加到 %Install%\Xml\Schemas,as described here。在底部附近,它描述了如何使用“关联”元素通过扩展来关联模式。

    【讨论】:

      【解决方案3】:

      使用时,添加命名空间如 http//...../xxx.xsd 或 ../Common/xxx.xsd 就这么简单

      <configuration>
      
        <configSections>
          <section name="RouteConfigSection" type="RouteSection.RouteConfigSection,RouteSection" />
        </configSections>
      
        <RouteConfigSection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="RouteConfigSection.xsd">
          <routes>...
      

      同时:

      public class RouteConfigSection : ConfigurationSection
      {
          [ConfigurationProperty("routes", IsDefaultCollection = false)]
          public RouteConfigElementCollection Routings { get { return (RouteConfigElementCollection)base["routes"]; } }
      
          //https://github.com/bspell1/NLogEx/blob/master/NLogEx.Mvc/Config/Config.cs
          [ConfigurationProperty("xmlns")]
          private String Ns1 { get { return null; } }
      
          [ConfigurationProperty("xmlns:xsi")]
          private String Ns2 { get { return null; } }
      
          [ConfigurationProperty("xsi:noNamespaceSchemaLocation")]
          private String Ns3 { get { return null; } }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-12-21
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 2019-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        相关资源
        最近更新 更多