Элементы xsd: как разместить отдельные простые значения сложного типа (последовательности) - PullRequest
0 голосов
/ 24 сентября 2010

Мне нужно создать XML-файл, подобный этому:

<AGENDA>
 <COVER COLOR>BLACK</COVER COLOR>
 <PRICE>24.99</PRICE>
 <ENTRIES>
  <NAMESURNAME>AAABBB</NAMESURNAME>
  <PHONENUMBER>3434534543</PHONENUMBER>
  <NAMESURNAME>EEEAAA</NAMESURNAME>
  <PHONENUMBER>2342342</PHONENUMBER>
 </ENTRIES>
</AGENDA>

То есть один или несколько параметров и комплексный тип в последовательности. Мне нужен только один набор параметров для каждого файла XML, в то время как одна или несколько записей. Я использую текстовый редактор xsd, встроенный в VS2010, но я не знаю, как правильно разместить элементы параметров. Если я наберу (после тега <xsd:schema....>):

 <xsd:element name="OPTION1" type="xsd:string"/>
  <xsd:element name="RawPolling">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
        <xsd:element name="RawPollingEntry">
          <xsd:complexType>
            <xsd:sequence maxOccurs="1" minOccurs="0">
              <xsd:element name="Nome" type="xsd:string" />
.....
....

Я не получаю никакой ошибки на xsd, но когда я пишу xml, я получаю «XML-документ не может содержать несколько элементов корневого уровня» Я попытался переместить OPTION1 внутри RawPolling (но не внутри RawPollingEntry, OPTION1 не является частью сложного / последовательного типа, мне нужен только один OPTION1 на файл XML) и получить другие ошибки («элемент ... имеет недопустимый дочерний элемент элемент ...)

Как мне это сделать?

1 Ответ

2 голосов
/ 24 сентября 2010

Прежде всего, ваш XML недействителен - у вас не может быть тегов с пробелами в их именах, так что:

<COVER COLOR> ..... </COVER COLOR>

недопустимо для начала.

Далее. .NET поставляется с отличным инструментом под названием xsd.exe. В этом случае я сделал ваш XML действительным (изменил тег на <COVERCOLOR>), а затем запустил xsd.exe на нем - это создаст файл схемы XML на основе содержимого вашего файла XML.

Результат здесь такой:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="newschema" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="AGENDA">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="COVERCOLOR" type="xs:string" minOccurs="0" />
        <xs:element name="PRICE" type="xs:string" minOccurs="0" />
        <xs:element name="ENTRIES" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NAMESURNAME" nillable="true" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="NAMESURNAME_Text" msdata:Ordinal="0">
                    <xs:extension base="xs:string">
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="PHONENUMBER" nillable="true" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="PHONENUMBER_Text" msdata:Ordinal="0">
                    <xs:extension base="xs:string">
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Вы должны найти ваш xsd.exe в пути, похожем на этот:

C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bin\

Это на 64-битной машине с Windows 7 - на 32-битной вместо c:\program files\....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...