2009年12月28日星期一

用schema验证一个 XML文件,并生成相应的错误或警告

[Visual   Basic,   C#,   JScript]   下面的示例验证一个   XML   文件,并生成相应的错误或警告。  
   
  [Visual   Basic]    
  Imports   System  
  Imports   System.IO  
  Imports   System.Xml  
  Imports   System.Xml.Schema  
   
  public   class   Sample  
   
      public   shared   sub   Main   ()  
   
          'Load   the   schema   collection.  
          Dim   xsc   as   XmlSchemaCollection   =   new   XmlSchemaCollection()  
          xsc.Add("urn:bookstore-schema",   "books.xsd")  
   
          'Validate   the   file   using   the   schema   stored   in   the   collection.  
          'Any   elements   belonging   to   the   namespace   "urn:cd-schema"   generate  
          'a   warning   since   the   there   is   no   schema   matching   that   namespace.  
          Validate("store.xml",   xsc)    
      end   sub  
   
      private   shared   sub   Validate(filename   as   String,   xsc   as   XmlSchemaCollection)  
            Console.WriteLine()  
            Console.WriteLine("Validating   XML   file   {0}...",   filename.ToString())  
            Dim   reader   as   XmlTextReader   =   new   XmlTextReader   (filename)  
            Dim   vreader   as   XmlValidatingReader   =new   XmlValidatingReader   (reader)  
            vreader.ValidationType   =   ValidationType.Schema  
            vreader.Schemas.Add(xsc)  
   
            'Set   the   validation   event   handler.  
            AddHandler   vreader.ValidationEventHandler,   AddressOf   ValidationCallBack  
            'Read   the   XML   data.  
            while   (vreader.Read())  
            end   while  
   
            'Close   the   reader.  
            vreader.Close()  
      end   sub  
   
      'Display   any   warnings   or   errors.  
      public   shared   sub   ValidationCallBack   (sender   as   object,   args   as   ValidationEventArgs)  
            if   (args.Severity=XmlSeverityType.Warning)  
                Console.WriteLine("     Warning:   Matching   schema   not   found.     No   validation   occurred."   +   args.Message)  
            else  
                  Console.WriteLine("     Validation   error:   "   +   args.Message)  
          end   if  
      end   sub  
   
  end   class  
  [C#]    
  using   System;  
  using   System.IO;  
  using   System.Xml;  
  using   System.Xml.Schema;  
   
  public   class   Sample  
  {  
   
      public   static   void   Main   ()  
      {  
          //Load   the   schema   collection.  
          XmlSchemaCollection   xsc   =   new   XmlSchemaCollection();  
          xsc.Add("urn:bookstore-schema",   "books.xsd");  
   
          //Validate   the   file   using   the   schema   stored   in   the   collection.  
          //Any   elements   belonging   to   the   namespace   "urn:cd-schema"   generate  
          //a   warning   since   the   there   is   no   schema   matching   that   namespace.  
          Validate("store.xml",   xsc);    
      }  
   
      private   static   void   Validate(String   filename,   XmlSchemaCollection   xsc)  
      {  
            Console.WriteLine();  
            Console.WriteLine("\r\nValidating   XML   file   {0}...",   filename.ToString());  
            XmlTextReader   reader   =   new   XmlTextReader   (filename);  
            XmlValidatingReader   vreader=new   XmlValidatingReader   (reader);  
            vreader.ValidationType   =   ValidationType.Schema;  
            vreader.Schemas.Add(xsc);  
   
            //Set   the   validation   event   handler.  
            vreader.ValidationEventHandler   +=   new   ValidationEventHandler   (ValidationCallBack);  
            //Read   the   XML   data.  
            while   (vreader.Read()){}  
   
            //Close   the   reader.  
            vreader.Close();  
      }    
   
      //Display   any   warnings   or   errors.  
      public   static   void   ValidationCallBack   (object   sender,   ValidationEventArgs   args)  
      {  
            if   (args.Severity==XmlSeverityType.Warning)  
                Console.WriteLine("\tWarning:   Matching   schema   not   found.     No   validation   occurred."   +   args.Message);  
            else  
                  Console.WriteLine("\tValidation   error:   "   +   args.Message);  
   
      }      
  }  
  [JScript]    
  import   System  
  import   System.IO  
  import   System.Xml  
  import   System.Xml.Schema  
   
  public   class   Sample  
  {  
   
      public   static   function   Main   ()  
      {  
          //Load   the   schema   collection.  
          var   xsc   :   XmlSchemaCollection   =   new   XmlSchemaCollection();  
          xsc.Add("urn:bookstore-schema",   "books.xsd");  
   
          //Validate   the   file   using   the   schema   stored   in   the   collection.  
          //Any   elements   belonging   to   the   namespace   "urn:cd-schema"   generate  
          //a   warning   since   the   there   is   no   schema   matching   that   namespace.  
          Validate("store.xml",   xsc);    
      }  
   
      private   static   function   Validate(filename   :   String,   xsc   :   XmlSchemaCollection)  
      {  
            Console.WriteLine();  
            Console.WriteLine("\r\nValidating   XML   file   {0}...",   filename.ToString());  
            var   reader   :   XmlTextReader   =   new   XmlTextReader   (filename);  
            var   vreader   :   XmlValidatingReader   =   new   XmlValidatingReader   (reader);  
            vreader.ValidationType   =   ValidationType.Schema;  
            vreader.Schemas.Add(xsc);  
   
            //Set   the   validation   event   handler.  
            vreader.add_ValidationEventHandler(ValidationCallBack);  
            //Read   the   XML   data.  
            while   (vreader.Read()){}  
   
            //Close   the   reader.  
            vreader.Close();  
      }    
   
      //Display   any   warnings   or   errors.  
      public   static   function   ValidationCallBack   (sender,   args   :   ValidationEventArgs)  
      {  
            if   (args.Severity==XmlSeverityType.Warning)  
                Console.WriteLine("\tWarning:   Matching   schema   not   found.     No   validation   occurred."   +   args.Message);  
            else  
                  Console.WriteLine("\tValidation   error:   "   +   args.Message);  
   
      }      
  }  
  [Visual   Basic,   C#,   JScript]   前面的示例使用下列输入文件。  
   
  [Visual   Basic,   C#,   JScript]   store.xml    
   
  <?xml   version='1.0'?>  
  <bookstore   xmlns="urn:bookstore-schema"   xmlns:cd="urn:cd-schema">  
      <book   genre="novel">  
          <title>The   Confidence   Man</title>  
          <price>11.99</price>  
      </book>  
      <cd:cd>  
          <title>Americana</title>  
          <cd:artist>Offspring</cd:artist>  
          <price>16.95</price>  
      </cd:cd>  
  </bookstore>  
  books.xsd    
   
  <xsd:schema   xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
          xmlns="urn:bookstore-schema"  
          elementFormDefault="qualified"  
          targetNamespace="urn:bookstore-schema">  
   
    <xsd:element   name="bookstore"   type="bookstoreType"/>  
   
    <xsd:complexType   name="bookstoreType">  
      <xsd:sequence   maxOccurs="unbounded">  
        <xsd:element   name="book"     type="bookType"/>  
      </xsd:sequence>  
    </xsd:complexType>  
   
    <xsd:complexType   name="bookType">  
      <xsd:sequence>  
        <xsd:element   name="title"   type="xsd:string"/>  
        <xsd:element   name="author"   type="authorName"/>  
        <xsd:element   name="price"     type="xsd:decimal"/>  
      </xsd:sequence>  
      <xsd:attribute   name="genre"   type="xsd:string"/>  
    </xsd:complexType>  
   
    <xsd:complexType   name="authorName">  
      <xsd:sequence>  
        <xsd:element   name="first-name"     type="xsd:string"/>  
        <xsd:element   name="last-name"   type="xsd:string"/>  
      </xsd:sequence>  
    </xsd:complexType>  
   
  </xsd:schema>  

没有评论: