我有一个 xml 查询,应该经过 xsd 验证...(不可能??)
不幸的是,xml 的 xsd 模式包含两个序列之间的 xsd:choice。
但我在我的 xml 查询中指定了这两个序列。
这导致 xsd 无法通过 xml,关于我如何覆盖此检查的任何指示?
假如:
1. XSD 架构是标准化的,不能更改。
2. 任何更改都必须在我应用验证的 C# 代码中完成。
同样被问到:
但答案是修改 xsd 模式,这是用户接受的答案。
更新1
xml 与此类似:
...
<elem>
<subElemA>textValA</subElemA>
<subElemB>textValA</subElemB>
<elem>
...
但 XSD 说:
...
<xsd:choice>
<xsd:element name="subElemA" minOccurs="0" maxOccurs="1">
</xsd:element>
<xsd:element name="subElemB" minOccurs="0" maxOccurs="1">
</xsd:element>
</xsd:choice>
...
&如果我要从 xml 中删除 subElemA 或 subElemB,则 xml 将成功验证架构。
更新2
我希望找到一个解决方案,其中涉及调整我的模式验证代码以允许模式验证器绕过此检查;架构验证代码:
XmlReaderSettings setting = new XmlReaderSettings();
setting.ConformanceLevel = ConformanceLevel.Document;
setting.IgnoreComments = true;
setting.IgnoreWhitespace = true;
setting.IgnoreProcessingInstructions = true;
setting.ValidationType = ValidationType.Schema;
setting.Schemas.Add(defaultNameSpace, schemaLocation.AbsoluteUri);
setting.ValidationEventHandler += new ValidationEventHandler(this.SchemaValidationCallBack);
MemoryStream ms = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(xmlToValidate));
XmlReader reader = XmlReader.Create(ms, setting);
while (reader.Read());