CSharp - Unsuccessfully Validating an XML Element

Description

Unsuccessfully Validating an XML Element

Demo

using System;
using System.Linq;
using System.Xml.Linq;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
using System.Xml.Xsl;
using System.IO;/*from ww w .j a  va 2 s .  c o  m*/

class Program
{
    static void Main(string[] args)
    {

        string schema =
          @"<?xml version='1.0' encoding='utf-8'?>
    <xs:schema attributeFormDefault='unqualified' elementFormDefault='qualified'
     xmlns:xs='http://www.w3.org/2001/XMLSchema'>
      <xs:element name='Books'>
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs='unbounded' name='Book'>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name='FirstName' type='xs:string' />
                  <xs:element minOccurs='0' name='MiddleInitial' type='xs:string'/>
                  <xs:element name='LastName' type='xs:string' />
                </xs:sequence>
                <xs:attribute name='type' type='xs:string' use='required' />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>";

        XmlSchemaSet schemaSet = new XmlSchemaSet();
        schemaSet.Add("", XmlReader.Create(new StringReader(schema)));

        XDocument xDocument = new XDocument(
          new XElement("Books",
            new XElement("Book",
              new XAttribute("type", "Author"),
              new XElement("FirstName", "Joe"),
              new XElement("LastName", "Ruby")),
            new XElement("Book",
              new XAttribute("type", "Editor"),
              new XElement("FirstName", "PHP"),
              new XElement("LastName", "Python"))));

        Console.WriteLine("Here is the source XML document:");
        Console.WriteLine("{0}{1}{1}", xDocument, System.Environment.NewLine);

        bool valid = true;
        xDocument.Validate(schemaSet, (o, vea) =>
        {
            Console.WriteLine("An exception occurred processing object type {0}.",
              o.GetType().Name);
            Console.WriteLine(vea.Message);
            valid = false;
        }, true);

        Console.WriteLine("Document validated {0}.{1}",
          valid ? "successfully" : "unsuccessfully",
          System.Environment.NewLine);

        XElement bookParticipant = xDocument.Descendants("Book").
          Where(e => ((string)e.Element("FirstName")).Equals("Joe")).First();

        bookParticipant.Element("FirstName").
          AddAfterSelf(new XElement("MiddleName", "Carson"));

        valid = true;
        bookParticipant.Validate(bookParticipant.GetSchemaInfo().SchemaElement, schemaSet,
          (o, vea) =>
          {
              Console.WriteLine("An exception occurred processing object type {0}.",
              o.GetType().Name);

              Console.WriteLine(vea.Message);

              valid = false;
          }, true);

        Console.WriteLine("Element validated {0}.{1}",
          valid ? "successfully" : "unsuccessfully",
          System.Environment.NewLine);

    }
}

Result

Related Topic