Oto moja funkcja.Walidacja schematu XML kończy się niepowodzeniem z MemoryStream w C#
Jeśli przekazujesz MemoryStream do XmlReadera, czasami nie sprawdza poprawnych plików xml. Mam obiekt XmlDocument przechowywany w pamięci, chcę go sprawdzić wobec plików schematu xsd dostarczonych przez użytkownika końcowego.
ValidateSchema1(string XMLPath, string XSDPath)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(XMLPath);
using (MemoryStream mstream = new MemoryStream())
{
//StreamWriter writer = new StreamWriter(mstream);
xmlDocument.Save(mstream);
mstream.Seek(0, SeekOrigin.Begin);
XmlSchemaSet sc = new XmlSchemaSet();
// Add the schema to the collection.
sc.Add(null, XSDPath);
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = sc;
settings.ValidationEventHandler += ValidationCallBack;
// Create the XmlReader object.
// Not woking
XmlReader reader = XmlReader.Create(mstream, settings);
// Working
//XmlReader reader = XmlReader.Create(new StringReader(xmlDocument.InnerXml), settings);
// Working
//XmlReader reader = XmlReader.Create(XMLPath, settings);
// Parse the file.
while (reader.Read()) ;
}
}
Jesteś pewien, że XML jest ważna, gdy walidacja nie powiedzie? Wyjątek sprawdzania poprawności powinien Ci powiedzieć, dlaczego tak się nie stało. – Oded