当我们在XML中使用递归节点时,我们如何生成XSD?我的案例"问题"节点将包含在"问题"节点
以下是我正在处理的示例XML
<Sections>
<Section>
<SectionId>12</SectionId>
<SectionName>test test</SectionName>
<Questions>
<Question>
<Id>100</Id>
<QuestionText>Sample Text</QuestionText>
<Questions>
<Question>
<Id>101</Id>
<QuestionText>Sample Text</QuestionText>
<Questions>
<Question>
<Id>102</Id>
<QuestionText>Sample Text</QuestionText>
</Question>
<Question>
<Id>103</Id>
<QuestionText>Sample Text</QuestionText>
</Question>
</Questions>
</Question>
<Question>
<Id>104</Id>
<QuestionText>Sample Text</QuestionText>
</Question>
</Questions>
</Question>
<Question>
<Id>200</Id>
<QuestionText>Sample Text</QuestionText>
<Questions>
<Question>
<Id>201</Id>
<QuestionText>Sample Text</QuestionText>
</Question>
<Question>
<Id>202</Id>
<QuestionText>Sample Text</QuestionText>
</Question>
</Questions>
</Question>
</Questions>
</Section></Sections>
答案 0 :(得分:1)
诀窍是按名称创建元素并在其中,引用具有此元素作为其子元素的名称的另一个元素。也许举例说明这有助于:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Questions">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="Question"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Question">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" />
<xs:element name="QuestionText" />
<xs:element ref="Questions" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
当针对您的示例XML应用时,它会成功验证。
违背SO的精神,但作为对提问者的一种表示,这里是适用于更新的问题文本的上述模式的更新:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Sections">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="Section"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Section">
<xs:complexType>
<xs:sequence>
<xs:element name="SectionId"/>
<xs:element name="SectionName"/>
<xs:element ref="Questions"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Questions">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="Question"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Question">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" />
<xs:element name="QuestionText" />
<xs:element ref="Questions" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>