Dot net 3.5:如何在编写定义模式的xml文件时启用intellisense?

时间:2009-11-25 10:42:27

标签: .net xml visual-studio-2008 xsd intellisense

我已经定义了一个xml架构,如下所示

<?xml version="1.0" encoding="utf-8"?>

<xs:schema id="PacketTemplate"
targetNamespace="http://tempuri.org/PacketTemplate.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/PacketTemplate.xsd"
xmlns:mstns="http://tempuri.org/PacketTemplate.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:group name="packetTemplate">
  <xs:sequence id="packetTemplateSequence" >

   <xs:element name="packetType" maxOccurs="1" minOccurs="1" nillable="false" >
    <xs:complexType >
      <xs:attribute name="packetCode" type="xs:string" use="required"></xs:attribute>
      <xs:attribute name="packetTypeIncoming" type="xs:boolean" use="required"></xs:attribute>    
    </xs:complexType>
  </xs:element>
  <xs:element name="packetFieldInfo" minOccurs="1" maxOccurs="unbounded">
    <xs:complexType>
      <xs:attribute name="fieldName" type="xs:Name" use="required"></xs:attribute>
      <xs:attribute name="fieldNumber" type="xs:integer" use="required"></xs:attribute>
      <xs:attribute name="conversionCode" type="xs:integer" use="required"></xs:attribute>
      <xs:attribute name="fieldInUse" type="xs:boolean" use="required"></xs:attribute>

     </xs:complexType>
  </xs:element>
</xs:sequence>

现在当我编写与此模式对应的xml文件时,我无法使用智能感知功能,因为它应该在我的文件中显示所有可能的标记?

除了我应该怎么做,以便这个xml文件引用我定义的模式文件? Xml文件如下。

    <?xml version="1.0" encoding="utf-8" ?>
    <packetTemplate>
       <packetType packetCode="601" packetTypeIncoming="123" fieldInUse="true">
       </packetType>
    </packetTemplate>

3 个答案:

答案 0 :(得分:1)

使用XSD验证XML的另一种方法是在使用msxml时指定XSD,然后不必标记XML。我不知道是否有某种方式的优势。

答案 1 :(得分:0)

在Visual Studio中,您可以打开* .xml文件,在属性窗口中,您可以在属性Schemas中指定模式文件。

这样,Visual Studio应该提供Intellisense,假设提供的架构有效。

您可以查看W3Schools examples如何创建XML架构。

答案 2 :(得分:0)

对于将来的引用:发布的模式不是格式良好的XML:最有可能在发布过程中,最后两行被截断。

通过修复,intellisense将无法工作,因为模式定义了一个组而不是一个元素。将xs:group更改为xs:元素,然后按照描述Visual Studio设置的答案,应该有一个工作。

还有一件事:发布的示例XML文件无效,因为至少还需要一个packetFieldInfo元素。