针对XSD的XML验证:元素不能包含字符,因为类型的内容类型仅为元素

时间:2010-02-25 07:34:14

标签: xml validation xsd

XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <ac code="JL" auto="1">
        <fee>10e</fee>
        <comission>
            <if country="JP">5%</if>
            <else>7%</else>
        </comission>
    </ac>
    <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>

XSD架构

<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" type="if" minOccurs="0" />
   <xs:element name="else" type="xs:string" minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>

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

</xs:schema>

这个方案没有用,因为“费用”的第一个元素没有“if”和“else”的元素

有什么想法吗?抱歉,英语不好=)

1 个答案:

答案 0 :(得分:1)

我认为您的架构应如下所示:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
  <xs:sequence>
    <xs:element maxOccurs="unbounded" name="ac">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="fee">
            <xs:complexType mixed="true">
              <xs:sequence minOccurs="0">
                <xs:element name="if">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute name="country" type="xs:string" use="required" />
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
                <xs:element name="else" type="xs:string" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>

          <xs:element name="comission">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="if">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute name="country" type="xs:string" use="required" />
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
                <xs:element name="else" type="xs:string" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="code" type="xs:string" use="required" />
        <xs:attribute name="auto" type="xs:unsignedByte" use="required" />
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

我生成了这个架构定义,直到你给出的xml文档。
希望这有助于 迈拉