Способ пропуска тегов выбора в проверке XML - PullRequest
0 голосов
/ 02 июня 2011

У меня есть следующий XSD:

  <xs:element name="Parameter" type="complex">
  </xs:element>
  <xs:complexType name="complex">   
    <xs:choice>
      <xs:element name="MyData" type="myData"/>
      <xs:element name="String" type="xs:string"/>
    </xs:choice>
    <xs:attribute name="Name" use="required" type="xs:string"/>   
  </xs:complexType>
  <xs:complexType name="myData">     
     <xs:attribute name="X" use="required" type="xs:integer"/> 
     <xs:attribute name="Y" use="required" type="xs:integer"/> 
  </xs:complexType>

когда я проверяю это

<Parameter Name="P"><MyData X="1" Y="2"></MyData></Parameter>

все в порядке, но когда я пытаюсь проверить это:

        <Parameter Name="P">5r5r5r5r</Parameter>

он говорит "Элемент 'Параметр' не может содержать текст. Список возможных ожидаемых элементов: 'MyData, String'." Есть ли способ пропустить установку <Sring></String> вокруг "5r5r5r5r"? 1013 *

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Похоже, вы хотите иметь элемент <Parameter>, который может содержать другие элементы или текст.Этого можно добиться, разрешив смешанное содержимое, установив атрибут mixed="true" для элемента <xs:complexType> или <xs:complexContent>.

Пример кода ниже.

<xs:element name="Parameter">
  <xs:complexType mixed="true">
    <xs:sequence>
      <xs:element name="MyData" type="MyData"/>
    </xs:sequence>
    <xs:attribute name="Name" use="required" type="xs:string"/>
  </xs:complexType>
<xs:element name="Parameter">

Примечание: смешанный тип позволяет элементу иметь любой из этих возможных вариантов содержимого

  • только текст
  • только элементы
  • как текст, так и элементы, так чтотекст может появляться
    • перед элементами
    • после элементов
    • между элементами
    • или любой комбинацией вышеупомянутых.

У вас есть три вопроса, которые все вращаются вокруг одной и той же темы.Если эти ответы не решают вашу проблему, тогда я прошу вас указать, какие требования вы действительно хотите выполнить.

  • Разрешено ли, чтобы элемент мог содержать как текст, так и подэлементы вв то же время?
  • Нужно ли ограничивать текстовое содержимое каким-либо форматом?
  • Могут ли возможные подэлементы быть какими-либо элементами или они ограничены некоторыми известными элементами?
  • Нужно ли иметь возможность проверять подэлементы, если они могут быть какими-либо элементами?
0 голосов
/ 02 июня 2011

Что ты действительно хочешь? Если вы хотите написать внутри тега Parameter, вы должны определить его так:

<xs:element name="Parameter" type="xs:string"></xs:element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...