无法将名称X解析为递归xml架构中的元素声明组件

时间:2014-06-25 23:41:23

标签: xml xsd schema

我刚刚开始使用XML模式。我正在创建一个简单的模式,我不明白为什么我在尝试实现一个简单的递归元素时出错。我确信这完全是微不足道的。

这里我收到以下错误: E [Xerces] src-resolve:无法将名称'node'解析为(n)'元素声明'组件。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="node">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="node" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

在这里,没有root元素,我没有得到错误......

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="node">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="node" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我完全被迷住0_0。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

如果您希望引用到某个元素,则必须将其声明为顶级。您可以同时使用rootnode引用相同的元素:

<xs:element ref="node" />

这就是你的第二个例子有效的原因。您可以使用此架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xs:element name="node">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="node" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="root">
       <xs:complexType>
           <xs:sequence>
               <xs:element ref="node" />
           </xs:sequence>
       </xs:complexType>
   </xs:element>
</xs:schema>

答案 1 :(得分:0)

这似乎解决了我的问题。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
   <xs:element name="root">
       <xs:complexType>
           <xs:sequence>
               <xs:element name="node_" type="nodeType"/>
           </xs:sequence>
       </xs:complexType>
   </xs:element>

    <xs:complexType name="nodeType">
        <xs:sequence>
            <xs:element name="node" type="nodeType"></xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>