在Visual Studio IDE中使用XSD进行XMLvalidation

我知道我以前做过这件事,但今天不行,我也找不到解释如何做的地方。 这可能是我的睡眠不足,但我怀疑是gremlins。

我有一个XML文档和一个充满XSD的目录来定义它。 如何将Visual IDE设置为向我通知validation失败,然后在给定上下文中提供有效标签和属性的智能列表?

我曾经尝试过:

  • 我用XML文档将XSD添加到了项目中。
  • 我已经将XSD添加到XML模式列表(在XML / Schemas …菜单项下)。
  • 我甚至已经将schemaLocation和noNamespaceSchemaLocation属性包含到了XML文档中。

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

更新:我有另一个开发人员尝试这个,也失败了。 他知道他已经用其他XML文档完成了这个工作。 然后我下载了Oxygen XML编辑器,它在相同的XML和XSD文件上工作得很好,所以文件看起来很好(或者Oxygen更宽容/灵活…)

吉姆

您需要将Visual Studio中的XML文档与您拥有的XSD文件相关联 – 您应该在XML文档的“属性”窗口中看到如下所示的内容:

替代文字

镜子1

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

替代文字

镜子1

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

一旦完成所有这些工作,Visual Studio XML编辑器就应该使用蓝色的缩放在编辑器中突出显示XML中的问题:

替代文字

镜子1

您不需要在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时,关于在您的模式中使用Type的注意事项

因为您在模式中指定了targetNamespace ,所以对模式中定义的types的任何引用都需要以名称空间作为前缀(这就是为什么我们在上面的<xs:schema />元素中添加了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" /> 

另一个失败点是Windows 7“阻塞”模式文件…右键单击磁盘上的xsd文件,属性>常规,如果阻止,您将有一个“解除阻止”button。 这导致我的XMLvalidation在VS2012失败。

你的xsd是否包含一个属性“targetNamespace”/ schema / @ targetNamespace,它类似于你在xml中引用的命名空间?

例:

xsd:<xs:schema …. targetNamespace =“Datafile.xsd”…>

xml:<data xmlns =“Datafile.xsd”> …

另请参阅XML / XSD intellisense在Visual Studio 2010中不起作用

我有同样的问题,但VS已经正确地引用我的模式。 原来我想validation的文件没有“xml”文件扩展名。 添加.xml到我的文件名的末尾,validation开始工作。