Как изменить XSD-элемент из string в xml?

#xml #xsd

#xml #xsd

Вопрос:

У меня есть следующая часть в моем XSD:

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

это означает, что значение параметра может быть любым string . Могу ли я как-то указать, что значение параметра может быть любым допустимым, xml подобным <aaa></aaa> ? Что-то вроде type="xs:xml"

Ответ №1:

Используйте <xs:any> , чтобы разрешить любые XML-элементы в вашей модели контента.

 <xs:element name="Parameter">
  <xs:complexType>
    <xs:sequence>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
  

Вы можете ограничить элементы, разрешенные <xs:any> определенными пространствами имен, с помощью namespace атрибута и управлять их проверкой с помощью processContents атрибута. Чтобы разрешить любой атрибут, используйте <xs:anyAttribute>

Дополнительная информация в рекомендации по схеме XML: 3.10.2 XML-представление компонентов схемы с подстановочными знаками

Комментарии:

1. Параметр по-прежнему может иметь значение «dfdf», я хочу иметь только допустимый xml для значения

2. @ Dominating С кодом, который у меня был в моем ответе, он не может содержать только текстовое содержимое. Вы уверены, что ваш код соответствует моему примеру? У вас все еще есть этот mixed="true" attribute in your элемент <complexType>`? Потому что, если он у вас есть, тогда также разрешено только текстовое содержимое.

Ответ №2:

Вам придется использовать

 <xs:element name="Parameter" type="myType>
  

где

 <complexType name="myType>
<choice>
<element "myXml" type="xml">
<element "myStr" type="xs:sting">
</choice>
</complexType>
  

и вам нужно будет определить xml как шаблон xml, который вы хотите использовать в качестве своего значения.