我需要用xsd验证这个xml

时间:2014-03-18 12:52:00

标签: xsd xsd-validation

我的xml文件是

<?xml version="1.0" encoding="UTF-8"?>
<edge xmlns="http://www.example.org/stext">
<ellipse rx="189" ry="22" cx="279" cy="531"
    style="fill:#FFFDFD;stroke:#000000;" id="Ellipse_23" isLocked="false" />
<ellipse rx="130" ry="38" cx="580" cy="393"
    style="fill:#FFFDFD;stroke:#000000;" id="Ellipse_19" isLocked="false" />
<ellipse rx="172" ry="92" cx="539" cy="245"
    style="fill:#BD7272;stroke:#D9B5B5;" id="Ellipse_20" isLocked="false" />
<circle r="51" cx="426" cy="284" style="fill:#BD7272;stroke:#D9B5B5;"
    id="Circle_16" isLocked="false" />
<circle r="45" cx="428" cy="397" style="fill:#FFFDFD;stroke:#302E2E;"
    id="Circle_17" isLocked="false" />
</edge>

这是我的XSD架构

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/stext"
xmlns:tns="http://www.example.org/stext" elementFormDefault="qualified">
<element name="edge">
    <complexType>
        <sequence>

            <element name="circle" maxOccurs="unbounded">
                <complexType>
                    <attribute name="r" type="int" />
                    <attribute name="cx" type="int" />
                    <attribute name="cy" type="int" />
                    <attribute name="style" type="string" />
                    <attribute name="id" type="string" />
                    <attribute name="isLocked" type="boolean" />
                </complexType>
            </element>
            <element name="ellipse" maxOccurs="unbounded">
                <complexType>
                    <attribute name="rx" type="int" />
                    <attribute name="ry" type="int" />
                    <attribute name="cx" type="int" />
                    <attribute name="cy" type="int" />
                    <attribute name="style" type="string" />
                    <attribute name="id" type="string" />
                    <attribute name="isLocked" type="boolean" />
                </complexType>
            </element>
        </sequence>
    </complexType>
</element>
</schema>

我遇到了这种异常

  
    

例外:cvc-complex-type.2.4.a:从元素&#39; ellipse&#39;开始发现无效内容。其中一个&#39; {&#34; http://www.example.org/stext&#34;:circle}&#39;是预期的。

  

1 个答案:

答案 0 :(得分:1)

发生这种情况,因为<sequence>强制执行特定订单。

我认为可以解决您的问题的方法是使用额外的xsd:choice元素。

如果你像

那样写
<sequence>
   <choice  maxOccurs="unbounded">
        <element name="circle">
            <complexType>
                <attribute name="r" type="int" />
                <attribute name="cx" type="int" />
                <attribute name="cy" type="int" />
                <attribute name="style" type="string" />
                <attribute name="id" type="string" />
                <attribute name="isLocked" type="boolean" />
            </complexType>
        </element>
        <element name="ellipse">
            <complexType>
                <attribute name="rx" type="int" />
                <attribute name="ry" type="int" />
                <attribute name="cx" type="int" />
                <attribute name="cy" type="int" />
                <attribute name="style" type="string" />
                <attribute name="id" type="string" />
                <attribute name="isLocked" type="boolean" />
            </complexType>
        </element>
    </choice>    
</sequence>

允许以任何顺序排列多个圆形或椭圆形元素。