targetNamespace issue with XmlSchemaSet

When attempting to validate your XML Document against a schema file in .NET, you might see the following error message:

[System.Xml.Schema.XmlSchemaException] = {"The targetNamespace parameter '' should be the same value as the targetNamespace 'urn:something' of the schema."}

Basically what this means is that either your schema file does not contain a “targetNamespace” attribute, or you haven’t specified the target namespace for the schema in your XmlSchemaSet.

Consider the following schema definition in file C:\schemas\testschema.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
           targetNamespace="urn:something"
           xmlns="urn:something"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Document" type="Document"/>
. . .
</xs:schema>

Your code creates an XDocument:

XNamespace xmlns = XNamespace.Get("urn:something");
XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
        new XElement(xmlns + "Document", // The root element.
            new XElement(xmlns + "ChildElement",
            . . .
        )
    )
);

Then you add the schema for this namespace:

XmlSchemaSet schema = new XmlSchemaSet();
schema.Add(xmlns.ToString(), "C:\\schemas\\testschema.xsd");

And finally you validate your XDocument against the schema:

doc.Validate(schema, (o, e) =>
{
    Console.WriteLine(e.Message);
});

Leave a Reply

Your email address will not be published. Required fields are marked *

*