Csharp/C Sharp/XML LINQ/Schema Validating

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Creating an XSD Schema by Inferring Itfrom an XML Document

<source lang="csharp"> using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.Schema; using System.Xml.Linq; public class MainClass {

   public static void Main() {
       XDocument xDocument = new XDocument(
         new XElement("Books",
           new XElement("Book",
             new XAttribute("type", "Author"),
             new XElement("FirstName", "A"),
             new XElement("LastName", "B")),
           new XElement("Book",
             new XAttribute("type", "Author"),
             new XElement("FirstName", "C"),
             new XElement("LastName", "D"))));
       Console.WriteLine(xDocument);
       xDocument.Save("bookparticipants.xml");
       XmlSchemaInference infer = new XmlSchemaInference();
       XmlSchemaSet schemaSet = infer.InferSchema(new XmlTextReader("bookparticipants.xml"));
       XmlWriter w = XmlWriter.Create("bookparticipants.xsd");
       foreach (XmlSchema schema in schemaSet.Schemas()) {
           schema.Write(w);
       }
       w.Close();
       XDocument newDocument = XDocument.Load("bookparticipants.xsd");
       Console.WriteLine(newDocument);
   }

}

</source>


Successfully Validating an XML Element

<source lang="csharp"> using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.Schema; using System.Xml.Linq; using System.IO; public class MainClass {

   public static void Main() {
       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)));
   }

}

</source>


Validating an XML Document

<source lang="csharp"> using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.Schema; using System.Xml.Linq; public class MainClass {

   public static void Main() {
       XDocument xDocument = new XDocument(
         new XElement("Books",
           new XElement("Book",
             new XAttribute("type", "Author"),
             new XElement("FirstName", "A"),
             new XElement("MiddleName", "Carson"),
             new XElement("LastName", "B")),
           new XElement("Book",
             new XAttribute("type", "Author"),
             new XElement("FirstName", "C"),
             new XElement("LastName", "D"))));
       Console.WriteLine(xDocument);
       XmlSchemaSet schemaSet = new XmlSchemaSet();
       schemaSet.Add(null, "bookparticipants.xsd");
       xDocument.Validate(schemaSet, (o, vea) => {
              Console.WriteLine(o.GetType().Name);
              Console.WriteLine(vea.Message);
          },true);
       foreach (XElement element in xDocument.Descendants()) {
           Console.WriteLine("Element {0} is {1}", element.Name,
             element.GetSchemaInfo().Validity);
           XmlSchemaElement se = element.GetSchemaInfo().SchemaElement;
           if (se != null) {
               Console.WriteLine(
                 "Schema element {0} must have MinOccurs = {1} and MaxOccurs = {2}{3}",
                 se.Name, se.MinOccurs, se.MaxOccurs, System.Environment.NewLine);
           } else {
               Console.WriteLine();
           }
       }
   }

}

</source>


Validating an XML Document with a Lambda Expression

<source lang="csharp"> using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.Schema; using System.Xml.Linq; public class MainClass {

   public static void Main() {
       XDocument xDocument = new XDocument(
       new XElement("Books",
         new XElement("Book",
           new XAttribute("type", "Author"),
           new XAttribute("language", "English"),
           new XElement("FirstName", "A"),
           new XElement("LastName", "B")),
         new XElement("Book",
           new XAttribute("type", "Author"),
           new XElement("FirstName", "C"),
           new XElement("LastName", "D"))));
       Console.WriteLine(xDocument);
       XmlSchemaSet schemaSet = new XmlSchemaSet();
       schemaSet.Add(null, "bookparticipants.xsd");
       try {
           xDocument.Validate(schemaSet, (o, vea) => {
                    Console.WriteLine(o.GetType().Name);
                    Console.WriteLine(vea.Message);
                    throw (new Exception(vea.Message));
                });
       } catch (Exception ex) {
           Console.WriteLine("Exception occurred: {0}", ex.Message);
       }
   }

}

</source>


Validating an XML Document with Default Validation Event Handling

<source lang="csharp"> using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.Schema; using System.Xml.Linq; public class MainClass {

   public static void Main() {
       XDocument xDocument = new XDocument(
         new XElement("Books",
           new XElement("Book",
             new XAttribute("type", "Author"),
             new XElement("FirstName", "A"),
         new XElement("MiddleInitial", "C"),
             new XElement("LastName", "B")),
           new XElement("Book",
             new XAttribute("type", "Author"),
             new XElement("FirstName", "C"),
             new XElement("LastName", "D"))));
       Console.WriteLine(xDocument);
       XmlSchemaSet schemaSet = new XmlSchemaSet();
       schemaSet.Add(null, "bookparticipants.xsd");
       try {
           xDocument.Validate(schemaSet, null);
       } catch (XmlSchemaValidationException ex) {
           Console.WriteLine("Exception occurred: {0}", ex.Message);
       }
   }

}

</source>