Ho un XDocument
che convalido con uno schema XML. Quando XDocument
non è valido, è necessario trovare i nodi XML non validi in modo che l'utente possa facilmente accedere alla rispettiva posizione nella mia applicazione (ad esempio facendo doppio clic su un messaggio nella griglia di un messaggio).Come trovare il nodo XML non valido in XDocument che viene convalidato su uno schema (XmlSchemaValidationException.SourceObject è null)
Io uso il metodo di estensione System.Xml.Schema.Validate()
a tale scopo. Il secondo argomento del metodo Validate() è un System.Xml.ValidationEventHandler
che viene chiamato su ogni elemento XML non valido. Passa a System.Xml.ValidationEventArgs
. Il ValidationEventArgs.Exception
può essere convertito in . Ora il XmlSchemaValidationException
ha una proprietà SourceObject
che mi aspettavo di contenere un riferimento al nodo XML non valido. Sfortunatamente è sempre nullo.
il seguente frammento illustra il mio utilizzo:
XDocument doc = XDocument.Load(@"c:\temp\booksSchema.xml");
// Create the XmlSchemaSet class.
XmlSchemaSet sc = new XmlSchemaSet();
// Add the schema to the collection.
sc.Add("urn:bookstore-schema", @"c:\temp\books.xsd");
// Validate against schema
doc.Validate(sc, delegate(object sender, ValidationEventArgs e)
{
XmlSchemaValidationException ve = e.Exception as XmlSchemaValidationException;
if (ve != null)
{
object errorNode = ve.SourceObject;
// ve.SourceObject is always null
}
});
La convalida in sé funziona correttamente, ma non riesco a ottenere un riferimento sul nodo valido. Stranamente, lo stesso approccio funziona bene per System.Xml.XmlDocument
, ma sfortunatamente devo lavorare con XDocument
in questo contesto.
Qualcuno ha un suggerimento su come trovare il nodo non valido in XDocument
?