我知道我以前做过这个,但今天不行,也找不到解释怎么做的地方。这可能是我的睡眠不足,但我怀疑是小鬼。
我有一个XML文档和一个充满XSD的目录来定义它。如何设置Visual IDE以通知我验证失败,然后在给定的上下文中提供有效标签和属性的智能感知列表?
我尝试过的:
Visual Studio仍然没有放弃任何有用的调试或编辑信息。我试过了2010年和2008年(我在2008年之前就已经做过了)
更新:我有另一个开发人员尝试这个,它也失败了。他知道他已经使用其他XML文档完成了它并使其工作。然后我下载了Oxygen XML编辑器,它在相同的XML和XSD文件上运行良好,所以文件看起来很好(或者Oxygen更宽容/更灵活......)
您无需在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
,所以对模式中定义的类型的任何引用都需要以命名空间为前缀(这就是我们在上面的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" />
这里的另一个失败点是Windows 7“阻塞”模式文件...右键单击磁盘上的xsd文件,属性>常规,如果它被阻止,您将有一个“取消阻止”按钮。这导致我的XML验证在VS2012中失败。
你的xsd是否包含一个属性"targetNamespace"
/schema/@targetNamespace
,它类似于你在xml中引用的命名空间?
例子:
XSD:
<xs:schema .... targetNamespace="Datafile.xsd" ... >
XML:
<data xmlns="Datafile.xsd" >...</data>
我有同样的问题,但VS已正确引用我的架构。原来我试图验证的文件没有'xml'文件扩展名。在我的文件名末尾添加.xml,验证开始起作用。