代码之家  ›  专栏  ›  技术社区  ›  Jim McKeeth

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

  •  89
  • Jim McKeeth  · 技术社区  · 14 年前

    我知道我以前做过这件事,但今天它不起作用,我也找不到任何地方来解释怎么做。可能是我睡眠不足,但我怀疑是小妖精。

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

    我所尝试的:

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

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

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

    5 回复  |  直到 7 年前
        1
  •  124
  •   Martijn Pieters    7 年前
    <>吉姆,

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

    在XML模式集编辑器中(单击属性窗口的“模式”文本框中的(…)省略号时打开),需要确保您的模式存在。此外,请确保启用了该架构的 use->code>列-如果没有,请单击它-您将获得选项的下拉列表,选择 use->one和绿色选中标记:.

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

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

    isual studio包含您拥有的XSD文件-您应该在XML文档的“属性”窗口中看到类似的内容:

    alt text

    Mirror 1

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

    alt text

    Mirror 1

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

    一旦所有这些都就位,Visual Studio XML编辑器应该使用蓝色斜线突出显示编辑器中XML的问题:

    alt text

    Mirror 1

        2
  •  32
  •   Ross McNab    10 年前

    您不需要手动关联Visual Studio中的文件-它将 自动地 如果XML文件和XSD文件都已打开,并且名称空间定义正确,则将它们与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 在您的模式中,对模式中定义的类型的任何引用都需要以名称空间作为前缀(这就是我们添加 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
  •  3
  •   EJA    11 年前

    另一个失败点是Windows7“阻塞”架构文件…右键单击磁盘上的XSD文件“属性”>“常规”,如果该文件被阻止,您将看到一个“取消阻止”按钮。这导致我的XML验证在VS2012中失败。

        4
  •  1
  •   Community CDub    7 年前

    您的xsd是否包含与XML中所引用的命名空间类似的属性“targetnamespace”/schema/@targetnamespace?

    例子:

    XSD: <xs:架构….targetnamespace=“datafile.xsd”…gt;

    XML: <data xmlns=“数据文件.xsd”>…

    也见 XML/XSD intellisense not working in Visual Studio 2010

        5
  •  0
  •   John Livermore    12 年前

    我有同样的问题,但是vs已经正确地引用了我的模式。结果发现我试图验证的文件没有“xml”文件扩展名。在文件名末尾添加了.xml,验证开始工作。