1

I am having trouble validating serialized data.

Ok, so I started with an XSD file which I got from some third party. Generated C# classes using xsd tool. Then I added

[XmlAttribute("noNamespaceSchemaLocation", Namespace = System.Xml.Schema.XmlSchema.InstanceNamespace)]
public string SchemaLocation = "http://localhost/schemas/AP_Transactions_10052011.xsd";

to the top level object. The URL in question is obviously accessible from my machine where I am running the code. Then I am serializing it using XmlSerializer, which correctly produces

<?xml version="1.0" encoding="utf-8"?>
<BU_AP_Vendor_Invoices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="http://local.com/schemas/AP_Transactions_10052011.xsd">
...
</BU_AP_Vendor_Invoices>

So far so good. Now I am trying to validate the file like so:

public static void Validate(TextReader xmlData)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ReportValidationWarnings;
    settings.ValidationEventHandler += delegate(object sender, ValidationEventArgs args)
    {
        Console.WriteLine(args.Message);
    };

    using (XmlReader xmlReader = XmlReader.Create(xmlData, settings))
        while (xmlReader.Read()) ;
}

Which results Could not find schema information for the element 'element name' warnings for every element in the XML file. I assume that means the XSD is simply not being loaded.

I was looking at the XmlReaderSettings.Schemas, but how would the reader know what to add there? I assumed that if I don't add schemas explicitly then magic will simply happen, but that doesn't seem to work.

Question is how to do this properly?

Ilia G
  • 10,043
  • 2
  • 40
  • 59

1 Answers1

0

Please take a look at this post; the gist is to use XmlSchemaValidationFlags.ProcessSchemaLocation.

Community
  • 1
  • 1
Petru Gardea
  • 21,373
  • 2
  • 50
  • 62