我刚刚开始使用 XML 模式。我正在创建一个简单的架构,但我不明白为什么在尝试实现一个简单的递归元素时会出错。我确定这完全是微不足道的。
在这里,我收到以下错误:E [Xerces] src-resolve:无法将名称“节点”解析为 (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>
Run Code Online (Sandbox Code Playgroud)
在这里,没有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>
Run Code Online (Sandbox Code Playgroud)
我完全被0_0迷住了。我怎样才能做到这一点?
如果你想引用一个元素,它必须被声明为顶级。您可以同时使用root并node引用相同的元素:
<xs:element ref="node" />
Run Code Online (Sandbox Code Playgroud)
这就是为什么你的第二个例子有效。您可以使用此架构:
<?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>
Run Code Online (Sandbox Code Playgroud)