我正在从一个包含多种类型的多个元素的 xml 文档创建一个模式,但是以随机顺序,一旦序列化然后反序列化就需要维护(我在 VB.NET 中编程,但 C# 答案很好,所以我没有指定语言)。
<xml version="1.0" encoding="utf-8">
<sample:ABC>
<sample:DEF></sample:DEF>
<sample:XYZ></sample:XYZ>
<sample:DEF></sample:DEF>
<sample:PNQ></sample:PNQ>
<sample:DEF></sample:DEF>
<sample:DEF></sample:DEF>
</sample:ABC>
到目前为止,我有这个由 xsd.exe 生成的模式:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ABC">
<xs:complexType>
<xs:sequence>
<xs:element name="DEF" minOccurs="0" />
<xs:element name="XYZ" minOccurs="0" />
<xs:element name="PNQ" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
然而,这与 xml 可能出现的所有可能方式并不匹配,显然我已经大量简化了 xml 和模式,并且只显示了一个示例,以便更容易地演示问题。
我看到了使用该all
元素的建议,但只允许每个孩子一个。我还尝试添加重复的子元素(例如两个 DEF 元素),但这会创建一个“不明确”的模式。我也尝试过使用一系列选择元素,但是从模式生成的代码必须使用对象,因此不是类型安全的。我认为可以使用继承来解决这个问题,但我的模式技能不符合它。
问题是:是否有任何模式元素可用于获得与 xml 的正确匹配?如果不能,我至少可以创建一个可用于检查 xml 有效性的模式吗?