Maison > développement back-end > Tutoriel XML/RSS > 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

黄舟
Libérer: 2017-03-23 16:55:10
original
2229 Les gens l'ont consulté

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();
        }
    }
}
Copier après la connexion

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>
Copier après la connexion


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>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal