2010-02-24 88 views
-1

XMLXML验证XSD问题

<?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> 

该方案不验证:(

但如果我插入的元素 “如果” 内in 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> 

该代码是有效的

我该如何解决这个问题?谢谢!对不起,对英文不好

+0

-1:我试图编辑你的问题的标题,以更具体地发现类似的问题[已经解决](http://stackoverflow.com/q/20926860/413020)。我不认为这种“解决我的代码”的问题增加了任何东西。 – Alberto 2014-07-17 05:38:40

回答

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来允许它包含文本。