J'ai un fichier XML qui est téléchargé sur une page ASP.Net via le contrôle de téléchargement de fichier normal. Quand il se lève, j'essaye de valider et de désérialiser le XML. Cependant, le code ci-dessous est vraiment très pratique pour valider un fichier XML qui fait référence à c'est XSD comme ceci:Chargement d'un fichier XML, en référence à un fichier XSD, dans ASP.Net
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Cependant, si je télécharge ce fichier XML, seul le fichier XML obtient téléchargé, donc .. \ localSchemaPath. xsd n'existe pas, donc il ne peut pas valider.
Même si je stockaient le XSD localement, il ne serait pas encore tout à fait raison que le fichier XML peut être écrit avec un emplacement de schéma comme:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
ou xsi: schemaLocation = "someurl localSchemaPath. xsd " ou xsi: schemaLocation =" someurl .................. \ localSchemaPath.xsd " s'il le souhaitait.
Dilemme!
(Aux fins de cette question, j'ai pincé le code ci-dessous à partir de: Validating an XML against referenced XSD in C#)
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class ValidXSD
{
public static void Main()
{
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);
// Parse the file.
while (reader.Read()) ;
}
// Display any warnings or errors.
private static void ValidationCallBack(object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
Console.WriteLine("\tWarning: Matching schema not found. No validation occurred." + args.Message);
else
Console.WriteLine("\tValidation error: " + args.Message);
}
}