XDocument.Validate 拡張メソッドで Xml スキーマを使用して Xml フラグメントを検証しようとしています。無効な Xml フラグメントが使用されると常に ValidationEventHandler が適切に起動しますが、XmlSchemaValidationException の LineNumber プロパティと LinePosition プロパティの両方が 0 になります。
private bool Validate(XDocument doc)
{
bool isValid = true;
List<string> validationErrors = new List<string>();
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, "MyCustomSchema.xsd");
doc.Validate(schemas, (sender, args) =>
{
validationErrors.Add(String.Format("{0}: {1} [Ln {2} Col {3}]",
args.Severity,
args.Exception.Message,
args.Exception.LineNumber,
args.Exception.LinePosition));
isValid = false;
}, false);
return isValid;
}
上記の例での私の目標は、validationErrors を使用して、検証が失敗した理由をユーザーに通知することです。ただし、このメソッドを使用すると、LineNumber と LinePosition は両方とも 0 になります。
スニペットは十分に単純に見え、有効な Xml フラグメントと無効な Xml フラグメントの両方に対して検証するという点で期待どおりに機能するように見えます。
前もって感謝します!