Sto provando a convalidare un frammento Xml utilizzando uno schema Xml con il metodo di estensione XDocument.Validate. Ogni volta che un frammento XML non valido viene utilizzato i fuochi ValidationEventHandler correttamente, tuttavia sia le proprietà LineNumber e LinePosition del XmlSchemaValidationException sono 0.XmlSchemaValidationException.LineNumber e LinePosition sono 0 durante la convalida di uno schema Xml con XDocument.Validate
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;
}
Il mio obiettivo nell'esempio di cui sopra è quello di utilizzare validationErrors per informare un utente sul motivo per cui il validazione fallita. Tuttavia, quando si utilizza questo metodo, LineNumber e LinePosition sono entrambi 0.
Lo snippet sembra abbastanza semplice e sembra funzionare come previsto in termini di convalida con entrambi i frammenti Xml validi e non validi.
Grazie in anticipo!
Per quanto posso vedere, XmlSchemaValidator che viene istanziato utilizza solo una DummyPostion interna e non vedo un'opzione per ottenere un'implementazione migliore iniettata. – rene