Помогите найти ошибку в схеме XSD
От: Interceptor Украина  
Дата: 24.11.06 13:59
Оценка:
Мне нужно построить клас, который читал бы данные из xml-файла и записывал их в него.

Есть xml файл:

<KSPlayers>
  <KSPlayer>
    <Name>BSPlayer</Name>
    <Extensions>
      <Ext>
        <Name>avi</Name>
        <Priority>1</Priority>
      </Ext>
      <Ext>
        <Name>mpg</Name>
        <Priority>1</Priority>
      </Ext>
    </Extensions>
    <Registry>
      <Path>HKEY_CURRENT_USER\Software\BST\bsplayerv1</Path>
      <key>AppPath</key>
    </Registry>
    <Filesystem>
      <Dir>C:\Program Files\BSplayerPro</Dir>
      <Filename>bsplayer.exe</Filename>
    </Filesystem>
    <Download>
      <WebSite>http://www.bsplayer.com</WebSite>
      <URL>http://www.bsplayer.com</URL>
    </Download>
  </KSPlayer>
  <KSPlayer>
    <Name>Apple QuickTime</Name>
    <Extensions>
      <Ext>
        <Name>qt</Name>
        <Priority>1</Priority>
      </Ext>
      <Ext>
        <Name>avi</Name>
        <Priority>2</Priority>
      </Ext>
    </Extensions>
    <Registry>
      <Path>HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QuickTime.qt\shell\open\command</Path>
      <key>(Default)</key>
    </Registry>
    <Filesystem>
      <Dir>c:\Program Files\QuickTime</Dir>
      <Filename>QuickTimePlayer.exe</Filename>
    </Filesystem>
    <Download>
      <WebSite>http://www.apple.com/quicktime</WebSite>
      <URL>http://www.apple.com/quicktime</URL>
    </Download>
  </KSPlayer>

</KSPlayers>


с помощью xsd.exe" Players.xml строится xsd файл


<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="KSPlayers" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="KSPlayers" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="KSPlayer">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" minOccurs="0" />
              <xs:element name="Extensions" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Ext" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Name" type="xs:string" minOccurs="0" />
                          <xs:element name="Priority" type="xs:string" minOccurs="0" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Registry" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Path" type="xs:string" minOccurs="0" />
                    <xs:element name="key" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Filesystem" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Dir" type="xs:string" minOccurs="0" />
                    <xs:element name="Filename" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Download" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="WebSite" type="xs:string" minOccurs="0" />
                    <xs:element name="URL" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>


и по нему я пытаюсь сделать класс xsd.exe" /l:CS Players.xsd /classes /n:BusinessData.PlayersSchema


                KSPlayers ksPlayers;
                XmlSerializer serializer = new XmlSerializer(typeof (KSPlayers));
                FileStream fs = new FileStream("Players.xml", FileMode.Open);
                XmlReader reader = new XmlTextReader(fs);

                ksPlayers = (KSPlayers) serializer.Deserialize(reader);


Собственно ошибка возникает на этапе создания объекта serializer

System.InvalidOperationException: Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'KSBusinessData.PlayersSchema.KSPlayersKSPlayerExtensionsExt[]' to 'KSBusinessData.PlayersSchema.KSPlayersKSPlayerExtensionsExt'
error CS0029: Cannot implicitly convert type 'KSBusinessData.PlayersSchema.KSPlayersKSPlayerExtensionsExt' to 'KSBusinessData.PlayersSchema.KSPlayersKSPlayerExtensionsExt[]'


я понимаю, что где-то ошибка в схеме, но не могу понять где. То есть она мне явно не нравится тут:

<xs:sequence>
<xs:element name="Ext" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Priority" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>

возможно в первой строчке нужно choice?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.