在Visual Studio IDE中使用XSD进行XML验证


96

我知道我以前曾经做过,但是今天无法使用,也找不到可以解释如何做的地方。可能是我睡眠不足,但我怀疑是小妖精。

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

Answers:


138

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

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

    XML属性>模式

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

    XML模式选择器

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

  4. 完成所有这些操作后,Visual Studio XML编辑器应使用蓝色波浪形突出显示编辑器中XML的问题:

    错误示例


谢谢,这是一个很好的详细解释,但我的仍然无法正常工作。我不知道您可以从类似的属性进入架构列表。
Jim McKeeth'7

@Jim McKeeth:如果您修改XML并再次保存该怎么办?有时XML验证需要触发才能启动...
marc_s 2010年

即使它对我没有用,我也接受了您的回答。我猜我的系统只是连接了软管,但是我已经转移到了新计算机上,现在一切正常。
Jim McKeeth

38
@jim不知道,如果你有同样的问题,但我花了很多时间可笑量之前,我意识到,XML文件必须打开在编辑器中的焦点必须是在编辑器中,当你调用属性窗口。只有这样,您才能获得“ XML文档”属性,可以在其中分配架构。如果焦点位于解决方案资源管理器中,则“属性”窗口仅显示文件属性,即在那里无法进行架构分配。
herzbube 2012年

2
我认为您应该在答案本身中添加@herzbube的发现。
ashish

35

您不需要在Visual Studio中手动关联文件- 如果您同时打开了XML文件和正确定义的命名空间,它将自动将XML文件与XSD文件进行匹配。

定义名称空间:

在XML文件的根元素中:

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

在XSD文件的schema元素中:

<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在架构中指定a ,所以对架构中定义的类型的任何引用都必须以名称空间作为前缀(这就是我们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" />

3

另一个失败点是Windows 7“阻止”架构文件...右键单击磁盘上的xsd文件,依次单击“属性”>“常规”,如果被阻止,则将具有“取消阻止”按钮。这导致我的XML验证在VS2012中失败。



0

我有同样的问题,但是VS已经正确引用了我的架构。原来我尝试验证的文件没有'xml'文件扩展名。在文件名的末尾添加了.xml,验证开始生效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.