我知道我以前做过这一点,但是今天它不起作用,也无法在任何解释如何做的地方找到。可能是我缺乏睡眠,但我怀疑格林林斯。

我有一个XML文档和一个装有XSD的目录,可以定义它。如何设置视觉IDE以将验证失败通知我,然后在给定上下文中提供有效标签和属性的IntelliSense列表?

我尝试了什么:

  • 我已经使用XML文档将XSD添加到项目中。
  • 我已经将XSD添加到XML模式列表(在XML / schemas ...菜单项下。)。
  • 我什至将示意图和非AMEMESPACESEPACESCHEMALICATION属性包含在XML文档中。

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

更新: 我有另一个开发人员尝试一下,这也对他失败了。他知道他已经使用了其他XML文档来完成工作,并且它起作用了。然后,我下载了氧XML编辑器,并且在同一XML和XSD文件上工作正常,因此这些文件似乎很好(或氧气更宽容 /灵活。

有帮助吗?

解决方案

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

  1. 您应该在XML文档的属性窗口中看到类似的内容:

    XML Properties  loading= Schema">

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

    XML Schema Selector

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

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

    Example of Error

其他提示

您无需手动将视觉工作室中的文件关联 - 它将 自动地 如果您两个都打开了XML文件,则将XML文件匹配,并且您的名称空间正确定义了。

定义名称空间:

在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文件,属性>一般,如果被阻止,您将拥有一个“ unblock”按钮。这导致我的XML验证在VS2012中失败。

您的XSD包含一个属性吗 "targetNamespace" /schema/@targetNamespace 那类似于您在XML中引用的名称空间吗?

例子:

XSD:

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

XML:

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

也可以看看: XML/XSD Intellisense在Visual Studio 2010中不起作用

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top