xsdで検証する必要があるxmlクエリがあります...(不可能??)
残念ながら、xmlのxsdスキーマには、2つのシーケンスの間にxsd:choiceが含まれています。
しかし、私はxmlクエリでこれらのシーケンスの両方を指定しています。
これにより、xsdはxmlに失敗します。このチェックをオーバーライドする方法については、どのような方向ですか?
提供された:
1. XSDスキーマは標準化されており、変更できません。
2.変更は、検証を適用する場所の背後にあるC#コードで行う必要があります。
同じことが尋ねられました:
しかし、そこにあった答えは、xsdスキーマを変更することでした。これは、ユーザーが受け入れた答えでした。
update1
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は正常にスキーマ検証されます。
update2
スキーマバリデーターがこのチェックをバイパスできるようにスキーマ検証コードを微調整することを含む解決策を見つけたいと思っています。スキーマ検証のコード:
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());