Схема XML: элемент с атрибутами, содержащий только текст?

117

Мне трудно найти это. Как я могу определить элемент XML файла схемы для XML, который выглядит так:

<option value="test">sometext</option>

Я не могу понять, как определить элемент, который имеет тип xs:string, а также имеет атрибут.

Вот что у меня до сих пор:

<xs:element name="option">
    <xs:complexType>
        <xs:attribute name="value" type="xs:string" />
    </xs:complexType>
</xs:element>
Теги:
xsd

3 ответа

137
Лучший ответ

Try

  <xs:element name="option" type="AttrElement" />

  <xs:complexType name="AttrElement">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  • 0
    Я получаю следующее исключение при попытке вашего кода - org.xml.sax.SAXParseException: src-resol: Невозможно преобразовать имя 'AttrElement' в (n) компонент 'определения типа'. Почему это так?
  • 1
    Если это так, то, вероятно, потому что у вашего документа схемы есть целевое пространство имен, и вам нужно будет использовать префиксное имя, чтобы указать тип. (Если префикс tns связан с целевым пространством имен документа схемы, вы будете использовать type="tns:AttrElement" для ссылки на тип.)
Показать ещё 1 комментарий
69

... или встроенный эквивалент:

<xs:element name="option">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
  • 10
    Я нахожу это действительно не интуитивно, чтобы определить simpleContent в complexType . Но опять же это XSD, где ничего не кажется интуитивно понятным. Тем не менее, спасибо! :-)
  • 0
    Это покажет мне ошибку в IntelliJ ( V12.1.3 ): атрибут value «не разрешен». Использование complexContent вместо simpleContent исправило это.
Показать ещё 1 комментарий
-3

Я знаю, что это не одно и то же, но это работает для меня:

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню