【问题标题】:XML Validation with XSD in Visual Studio IDE在 Visual Studio IDE 中使用 XSD 进行 XML 验证
【发布时间】:2011-03-10 19:50:50
【问题描述】:

我知道我以前做过这个,但是今天不起作用,我也找不到任何解释如何做的地方。可能是我睡眠不足,但我怀疑是小精灵。

我有一个 XML 文档和一个包含定义它的 XSD 的目录。如何设置 Visual IDE 以通知我验证失败,然后在给定上下文中提供有效标签和属性的智能感知列表?

我尝试过的:

  • 我已将 XSD 添加到带有 XML 文档的项目中。
  • 我已将 XSD 添加到 XML Schema 列表中(在 XML / Schemas... 菜单项下。)
  • 我什至在 XML 文档中包含了 schemaLocation 和 noNamespaceSchemaLocation 属性。

Visual Studio 仍然没有放弃任何有用的调试或编辑信息。我在 2010 年和 2008 年都尝试过(我之前在 2008 年之前做过)

更新:我让另一位开发人员尝试了这个,但他也失败了。他知道他已经使用其他 XML 文档完成了这项工作,并且成功了。然后我下载了 Oxygen XML 编辑器,它在相同的 XML 和 XSD 文件上运行良好,所以文件似乎很好(或者 Oxygen 更宽容/更灵活......)

【问题讨论】:

    标签: xml visual-studio xsd intellisense xsd-validation


    【解决方案1】:

    您需要将 Visual Studio 中的 XML 文档与您拥有的 XSD 文件相关联。

    1. 您应该在 XML 文档的“属性”窗口中看到类似的内容:

    2. 在 XML 模式集编辑器(当您单击属性窗口中“模式”文本框中的 (...) 省略号时打开)中,您需要确保您的模式存在。此外,确保该架构的 Use 列已启用 - 如果未启用,请单击它 - 您将获得一个选项下拉列表,选择带有绿色复选标记的 Use

    3. 确保 Visual Studio 的错误列表窗口可见(菜单视图 > 错误列表)。这将显示 XML 和 XSD 架构定义之间的所有不一致。

    4. 一切就绪后,Visual Studio XML 编辑器应该在编辑器中使用蓝色波浪线突出显示 XML 的问题:

    【讨论】:

    • 谢谢,这是一个非常详细的解释,但我的仍然无法正常工作。我不知道你可以从这样的属性中访问模式列表。
    • @Jim McKeeth:如果您修改 XML 并再次保存会怎样?有时 XML 验证需要一个触发器才能启动...
    • 我已经接受了您的回答,即使它对我不起作用。我猜我的系统只是被水洗了,但我已经搬到了一台新电脑上,现在一切正常。
    • @jim 不确定您是否遇到同样的问题,但我花了很长时间才意识到必须在编辑器中打开 XML 文件并且焦点必须在 编辑器 当您调用“属性”窗口时。只有这样,您才能获得可以分配模式的“XML 文档”属性。如果焦点在解决方案资源管理器中,则“属性”窗口仅显示文件属性,即那里不可能分配模式。
    • 我认为您应该在答案中添加@herzbube 的发现。
    【解决方案2】:

    您无需在 Visual Studio 中手动关联文件 - 如果您同时打开 XML 文件和 XSD 文件,并且您的命名空间定义正确,它会自动将它们匹配。

    定义命名空间:

    在 XML 文件的根元素中:

    <Data xmlns='http://yourdomain.com/yourschema.xsd'>
        ...
    </Data>
    

    在 XSD 文件的架构元素中:

    <xs:schema
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://yourdomain.com/yourschema.xsd"
        xmlns:this="http://yourdomain.com/yourschema.xsd"
        elementFormDefault="qualified">
        ...
    </xs:schema>
    

    当您有 targetNamespace 时在架构中使用类型的说明

    因为您在架构中指定了targetNamespace,所以对架构中定义的类型的任何引用都需要以命名空间为前缀(这就是我们在上述&lt;xs:schema /&gt; 元素中添加xmlns:this 属性的原因) .

    <!-- Define the type as normal -->
    <xs:complexType name="Row">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
            <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <!-- Use the type (note the "this:" prefix) -->
    <xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
    

    【讨论】:

      【解决方案3】:

      这里的另一个故障点是 Windows 7“阻止”模式文件...右键单击磁盘上的 xsd 文件,属性 > 常规,如果它被阻止,您将有一个“取消阻止”按钮。这导致我的 XML 验证在 VS2012 中失败。

      【讨论】:

        【解决方案4】:

        您的 xsd 是否包含类似于您在 xml 中引用的命名空间的属性 "targetNamespace" /schema/@targetNamespace

        例子:

        XSD

        <xs:schema .... targetNamespace="Datafile.xsd" ... >
        

        XML

        <data xmlns="Datafile.xsd" >...</data>
        

        另请参阅:XML/XSD intellisense not working in Visual Studio 2010

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题,但 VS 已经正确引用了我的架构。原来我试图验证的文件没有“xml”文件扩展名。将 .xml 添加到我的文件名末尾,验证开始工作。

          【讨论】:

            猜你喜欢
            • 2012-04-13
            • 1970-01-01
            • 2019-04-06
            • 2014-03-27
            • 2016-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多