我刚刚开始使用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。我怎样才能做到这一点?
答案 0 :(得分:4)
如果您希望将引用到某个元素,则必须将其声明为顶级。您可以同时使用root
和node
引用相同的元素:
<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>