XML验证XSD问题

时间:2010-02-24 16:18:04

标签: xml xsd

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”中插入一个元素
<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 个答案:

答案 0 :(得分:1)

您需要在此处使用<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 tutorial page for text-only elements找到更多信息。基本上错误的是if没有被定义为能够拥有文本内容,因为它是一个复杂的类型。您可以使用simpleContent来包含文本。