在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文档的“属性”窗口中看到如下所示的内容:
在XML模式集编辑器中(当您在属性窗口的“模式”文本框中单击(…)省略号时打开),您需要确保您的模式存在。 此外,请确保已启用该架构的“ Use
列 – 如果没有,请单击它 – 您将看到一个下拉选项列表,选中Use
绿色选中标记的列表:
确保Visual Studio的错误列表窗口可见(菜单视图>错误列表)。 这将显示XML和XSD模式定义之间的所有不一致。
一旦完成所有这些工作,Visual Studio XML编辑器就应该使用蓝色的缩放在编辑器中突出显示XML中的问题:
您不需要在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开始工作。