XPathNavigator.CheckValidity validates invalid XML document

I'm trying to use XPathNavigator.CheckValidity to validate an XML document. Somehow, I was able to write tests that passed using this method, but now (mysteriously) aren't passing anymore. The only thing that I can think of which changed was moving from .NET 2 to .NET 3.5, but I can't find any documentation on anything changing here during that transition.

Here's an example program:

void Main()
{
    try
    {
        GetManifest().CreateNavigator().CheckValidity(GetSchemaSet(), (sender, args) => {
            // never get in here when debugging
            if (args.Severity == XmlSeverityType.Error) {
                throw new XmlSchemaValidationException("Manifest failed validation", args.Exception);
            }
        }); // returns true when debugging
    }
    catch (XmlSchemaValidationException)
    {
        // never get here
        throw;
    }

    // code here runs
}

IXPathNavigable GetManifest()
{
    using (TextReader manifestReader = new StringReader("<?xml version='1.0' encoding='utf-8' ?><BadManifest><bad>b</bad></BadManifest>"))
    {
        return new XPathDocument(manifestReader);
    }
}

XmlSchemaSet GetSchemaSet() 
{
    var schemaSet = new XmlSchemaSet();
    using (var schemaReader = new StringReader(Schema)){
        schemaSet.Add(XmlSchema.Read(schemaReader, null));
    }

    return schemaSet;
}

const string Schema = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<xs:schema attributeFormDefault=""unqualified"" elementFormDefault=""qualified"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" targetNamespace=""http://www.engagesoftware.com/Schemas/EngageManifest"">
  <xs:element name=""EngageManifest"">
    <xs:complexType>
      <xs:all>
        <xs:element name=""Title"" type=""xs:string"" />
        <xs:element name=""Description"" type=""xs:string"" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>";

I've tried the solution at Validate XML with a XSD Schema without changing the XML using C#, but I'm getting the same result... I must be missing some big consideration in how this validation thing works, but I can't see it...

Answers


The problem is that your XML is using the default namespace, but the XSD specifies a target namespace. If you specify <BadManifest xmlns="http://www.engagesoftware.com/Schemas/EngageManifest"> in your XML, you should find that the validator reports errors as expected. Otherwise, since it doesn't recognise the namespace of the XML, it just ignores it.


Need Your Help

php: empty line from nowhere

php debugging

I have strange error and not sure how to tackle it without wasting too much time. I have a method in my controller which should return xml using:

translation in django fixtures

django json gettext fixtures

Here is example initial_data.json. I want let django store value from column 'name' into translation file. So later, when value is printed somewhere, it could use its translated value. Is there any...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.