103

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

我有一个 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 更宽容/更灵活......)

4

5 回答 5

143

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

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

    XML 属性 > 架构

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

    XML 模式选择器

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

  4. 一旦所有这些都到位,Visual Studio XML 编辑器应该使用蓝色波浪线在编辑器中突出显示 XML 的问题:

    错误示例

于 2010-07-01T20:44:05.803 回答
36

您无需在 Visual Studio 中手动关联这些文件 -如果您同时打开 XML 文件和 XSD 文件,并且您的命名空间定义正确,它将自动将它们匹配到 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 时,关于在你的模式中使用类型的注释

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

<!-- 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" />
于 2013-05-30T08:48:48.753 回答
3

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

于 2013-07-24T12:44:18.617 回答
1

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

例子:

XSD

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

XML

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

另请参阅: XML/XSD 智能感知在 Visual Studio 2010 中不起作用

于 2010-11-29T16:13:54.993 回答
0

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

于 2012-09-28T20:15:32.817 回答