我收到了要编辑并发送回的XML文件。我无法更改收到的文件的结构。我为这些文件创建了一个XSD,在xsd.exe中使用它来生成c#类。 为了验证它,我只需要执行XML-> POCO-> XML并将输出与原始文件进行比较即可。
我的XML文件包含以下内容:
<infos>
<info />
<break />
<info />
<break />
<info />
</infos>
您看到的是信息与中断的交替。有时,它只能包含:
<infos>
<info />
</infos>
甚至
<infos />
任何人都可以帮助我构建适当的XSD部分,以生成的代码保留原始顺序的方式来表示这一点吗?
到目前为止,我最好的猜测是:
<xs:element name="infos">
<xs:complexType>
<xs:sequence>
<xs:element ref="info" />
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="break" minOccurs="0" />
<xs:element ref="info" />
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
但是在我反序列化的对象中,这不能处理更多的事情:
<infos>
<info />
<break />
<info />
</infos>
也就是说,我在第二条信息之后失去了任何东西。
我也尝试过:
<xs:element name="infos">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="info" />
<xs:element ref="break" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
或:
<xs:element name="infos">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
</xs:sequence>
<xs:element ref="info" />
<xs:element ref="break" minOccurs="0" />
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
但在两种情况下,最终输出将是:
<infos>
<info />
<info />
<info />
<break />
<break />
</infos>
也就是说,原始订单丢失了。
由于我可能会定期更新XSD文件并重新生成代码,因此我尽可能避免修改生成的代码。
任何帮助将不胜感激。
塞德里克。