Проблема проверки XML XSD - PullRequest
       9

Проблема проверки XML XSD

0 голосов
/ 24 февраля 2010

XML

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <ac code="B2" auto="1">
        <fee>
            <if country="RU">35e 50e 50e 80e 15e 10e</if>
            <else>10e</else>
        </fee>
        <comission>
            <if country="RU">3%</if>
            <else>5%</else>
        </comission>
    </ac>
</data>

Схема

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:element name="data" type="data"/>
 <xs:complexType name="data">
  <xs:sequence>
   <xs:element name="ac" minOccurs="0" maxOccurs="unbounded" type="ac"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="ac">
  <xs:sequence>
   <xs:element name="fee" type="feecomiss"/>
   <xs:element name="comission" type="feecomiss"/>
  </xs:sequence>
  <xs:attribute name="code" type="xs:string"/>
  <xs:attribute name="auto" type="xs:decimal"/>
 </xs:complexType>

 <xs:complexType name="feecomiss">
  <xs:sequence>
   <xs:element name="if" minOccurs="0" maxOccurs="unbounded" type="if"/>
   <xs:element name="else" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="if">
   <xs:attribute name="country" type="xs:string" />
 </xs:complexType>

</xs:schema>

Эта схема не проверяется: (

Но если я вставлю элемент внутри "если" в XML

<if country="RU"><lol>35e 50e 50e 80e 15e 10e</lol></if>

и исправление схемы

 <xs:complexType name="if">
  <xs:sequence>
   <xs:element name="lol" type="xs:string"/>
  </xs:sequence>
  <xs:attribute name="country" type="xs:string" />
 </xs:complexType>

Этот код действителен

Как я могу это исправить? Спасибо !!! Извините за плохой английский

1 Ответ

1 голос
/ 24 февраля 2010

Вы должны использовать элемент <xsd:simplecontent> здесь.

 <xs:complexType name="if">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="country" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
 </xs:complexType>

Более подробную информацию можно найти на странице учебника XSD для текстовых элементов . По сути, неправильно то, что if не может иметь текстовый контент, потому что это сложный тип. Вы используете simpleContent, чтобы позволить ему содержать текст.

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