Maison  >  Article  >  développement back-end  >  Introduction détaillée au partage de code utilisant XSD pour vérifier XML

Introduction détaillée au partage de code utilisant XSD pour vérifier XML

黄舟
黄舟original
2017-03-23 16:55:102166parcourir

Xsd

remplace DTD. Le langage
Schéma XML est également XSD. Le Schéma XML décrit la structure du document XML. Un document
XML peut être validé par rapport à un Schéma XML spécifié pour vérifier que le XMLSi le document répond à ses exigences. Les concepteurs de documents peuvent spécifier la structure et le contenu autorisés par un document XML via le Schéma XML
, et peuvent le vérifier en conséquence si un document XML est valide. Le Schéma XML lui-même est un document XML, conforme à la syntaxe XML structure. peut être analysé avec l'analyseur générique XML.
Un Schéma XML définira : les éléments qui apparaissent dans le document, les attributs qui apparaissent dans le document, les sous-éléments , sous-éléments Le nombre d'éléments, l'ordre des éléments enfants, si l'élément est vide, le type de données des éléments et des attributs, les valeurs par défaut et fixes des éléments ou des attributs.

Le suffixe du fichier XSD est .xsd.

Dans l'exemple de code suivant, le schéma ci-dessus est ajouté à la propriété XmlReaderSettings de l'objet XmlSchemaSetSchemas . L'objet XmlReaderSettings est passé en paramètre à la méthode Create de l'objet XmlReader qui valide le document XML ci-dessus.

La propriété
ValidationType de l'objet XmlReaderSettings est définie sur Schema , forçant la Création XmlReader
>Validation de la méthode XML document. Ajoutez ValidationEventHandler à l'objet XmlReaderSettings pour gérer tout avertissement déclenché par des erreurs trouvées lors de la validation XML de documents et de schémas ou Erreur événement.

Voici un exemple :

using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
using System.Xml.Serialization;
using System.Text;

public class XmlSchemaSetExample
{
    static void Main()
    {

        XmlReaderSettings booksSettings = new XmlReaderSettings();
        booksSettings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
        booksSettings.ValidationType = ValidationType.Schema;
        booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);

        MemoryStream ms = new MemoryStream();//定义一个数据流对象

        XmlDocument doc = new XmlDocument();

        doc.Load("contosoBooks.xml");

        doc.Save(ms);

        ms.Position = 0; //修改指针的位置

        XmlReader books = XmlReader.Create(ms,booksSettings);


        while (books.Read())
        {  }
     }

    static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
    {
        if (e.Severity == XmlSeverityType.Warning)
        {
            Console.Write("WARNING: ");
            Console.WriteLine(e.Message);
            Console.Read();
            
        }
        else if (e.Severity == XmlSeverityType.Error)
        {
            Console.Write("ERROR: ");
            Console.WriteLine(e.Message);
            Console.Read();
        }
    }
}

contosoBooks.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attribute
For
mDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2
001
/XMLSchema">
  <xs:element name="bookstore">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="book">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="title" type="xs:=string" />
              <xs:element name="author">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" name="name" type="xs:string" />
                    <xs:element minOccurs="0" name="first-name" type="xs:string" />
                    <xs:element minOccurs="0" name="last-name" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="price" type="xs:decimal" />
            </xs:sequence>
            <xs:attribute name="genre" type="xs:string" use="required" />
            <xs:attribute name="publicationdate" type="xs:date" use="required" />
            <xs:attribute name="ISBN" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


contosoBooks.xml

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
  <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

Remarques : À propos de certaines autres classes ou instances de Xsd

StreamWriter, StreamReader, XmlSchema,XmlSchemaSet

Stream stream = new MemoryStream(); //Lorsqu'un objet d'une classe ne peut pas être initialisé, vous pouvez envisager d'utiliser it Le hérite de la classe .

FileStream fs = File.Open("117.xml",FileMode.OpenOrCreate,FileAccess.ReadWrite);

TextReader tr1=new StreamReader(" 123.xml");

TextReader tr2= new StringReader("asdfsadfsdf");

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn