XmlSchemaCollection.Add 方法

定义

将给定架构添加到架构集合中。

重载

Add(XmlSchema)

XmlSchema 添加到集合。

Add(XmlSchemaCollection)

将在给定集合(包括其关联架构)中定义的所有命名空间添加到该集合。

Add(String, String)

将由给定的 URL 定位的架构添加到架构集合中。

Add(String, XmlReader)

XmlReader 中包含的架构添加到架构集合中。

Add(XmlSchema, XmlResolver)

XmlSchema 添加到集合。 用指定的 XmlResolver 解析任何外部引用。

Add(String, XmlReader, XmlResolver)

XmlReader 中包含的架构添加到架构集合中。 指定的 XmlResolver 用于解析任何可能引用的外部资源。

注解

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,已被类XmlSchemaSet替换。

Add(XmlSchema)

XmlSchema 添加到集合。

public:
 System::Xml::Schema::XmlSchema ^ Add(System::Xml::Schema::XmlSchema ^ schema);
public System.Xml.Schema.XmlSchema? Add (System.Xml.Schema.XmlSchema schema);
public System.Xml.Schema.XmlSchema Add (System.Xml.Schema.XmlSchema schema);
member this.Add : System.Xml.Schema.XmlSchema -> System.Xml.Schema.XmlSchema
Public Function Add (schema As XmlSchema) As XmlSchema

参数

schema
XmlSchema

要添加到集合中的 XmlSchema

返回

XmlSchema

XmlSchema 对象。

注解

targetNamespace 属性用于标识此架构。

如果添加的架构包含对其他命名空间的引用 (, include 并且 import 元素) ,则应用程序的信任级别将确定如何解析这些其他命名空间。 (在 .NET Framework 版本 1.0 中,始终) 使用默认值XmlUrlResolver

Fully trusted code: 没有用户凭据的默认值 XmlUrlResolver 用于解析任何外部资源。 这些其他命名空间的架构仅用于验证目的加载。 与原始架构不同,这些其他架构不会显式添加到架构集合中。 因此,无法使用任何集合方法或属性访问它们。 如果这些外部资源位于需要身份验证的网络资源上,请使用采用 XmlResolver 其参数之一的重载并指定 XmlResolver 具有所需凭据的重载。

Semi-trusted code: 不会解析外部引用。

备注

如果使用该属性访问该方法XmlSchemaCollection,该方法Add将使用XmlResolver该属性指定的XmlValidatingReader.XmlResolverXmlValidatingReader.Schemas值。

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,已被类XmlSchemaSet替换。

另请参阅

适用于

Add(XmlSchemaCollection)

将在给定集合(包括其关联架构)中定义的所有命名空间添加到该集合。

public:
 void Add(System::Xml::Schema::XmlSchemaCollection ^ schema);
public void Add (System.Xml.Schema.XmlSchemaCollection schema);
member this.Add : System.Xml.Schema.XmlSchemaCollection -> unit
Public Sub Add (schema As XmlSchemaCollection)

参数

schema
XmlSchemaCollection

要添加到该集合的 XmlSchemaCollection

注解

如果添加的架构包含对其他命名空间的引用, (通过include``import元素或x-schema属性) ,则应用程序的信任级别将确定如何解析这些其他命名空间。 (在 .NET Framework 版本 1.0 中,始终) 使用默认值XmlUrlResolver

Fully trusted code: 没有用户凭据的默认值 XmlUrlResolver 用于解析任何外部资源。 这些其他命名空间的架构仅用于验证目的加载。 与原始架构不同,这些其他架构不会显式添加到架构集合中。 因此,无法使用任何集合方法或属性访问它们。 如果这些外部资源位于需要身份验证的网络资源上,请使用采用 XmlResolver 其参数之一的重载并指定 XmlResolver 具有所需凭据的重载。

Semi-trusted code: 不会解析外部引用。

备注

如果使用该属性访问该方法XmlSchemaCollection,该方法Add将使用XmlResolver该属性指定的XmlValidatingReader.XmlResolverXmlValidatingReader.Schemas值。

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,已被类XmlSchemaSet替换。

适用于

Add(String, String)

将由给定的 URL 定位的架构添加到架构集合中。

public:
 System::Xml::Schema::XmlSchema ^ Add(System::String ^ ns, System::String ^ uri);
public System.Xml.Schema.XmlSchema? Add (string? ns, string uri);
public System.Xml.Schema.XmlSchema Add (string ns, string uri);
member this.Add : string * string -> System.Xml.Schema.XmlSchema
Public Function Add (ns As String, uri As String) As XmlSchema

参数

ns
String

与架构关联的命名空间 URI。 对于 XML 架构,这通常是 targetNamespace

uri
String

指定要加载的架构的 URL。

返回

XmlSchema

添加到架构集合中的 XmlSchema;如果所添加的架构为 XDR 架构,或者如果架构中有编译错误,则为 null

例外

此架构不是有效的架构。

示例

以下示例使用存储在中的 XmlSchemaCollection架构验证三个 XML 文件。

#using <System.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;

public ref class SchemaCollectionSample
{
private:
   XmlTextReader^ reader;
   XmlValidatingReader^ vreader;
   Boolean m_success;

public:
   SchemaCollectionSample()
   {
      reader = nullptr;
      vreader = nullptr;
      m_success = true;

      //Load the schema collection.
      XmlSchemaCollection^ xsc = gcnew XmlSchemaCollection;
      String^ schema = "books.xsd";
      String^ schema1 = "schema1.xdr";
      xsc->Add( "urn:bookstore-schema", schema ); //XSD schema
      xsc->Add( "urn:newbooks-schema", schema1 ); //XDR schema
      String^ doc1 = "booksSchema.xml";
      String^ doc2 = "booksSchemaFail.xml";
      String^ doc3 = "newbooks.xml";

      //Validate the files using schemas stored in the collection.
      Validate( doc1, xsc ); //Should pass.
      Validate( doc2, xsc ); //Should fail.   
      Validate( doc3, xsc ); //Should fail. 
   }


private:
   void Validate( String^ filename, XmlSchemaCollection^ xsc )
   {
      m_success = true;
      Console::WriteLine();
      Console::WriteLine( "Validating XML file {0}...", filename );
      reader = gcnew XmlTextReader( filename );

      //Create a validating reader.
      vreader = gcnew XmlValidatingReader( reader );

      //Validate using the schemas stored in the schema collection.
      vreader->Schemas->Add( xsc );

      //Set the validation event handler
      vreader->ValidationEventHandler += gcnew ValidationEventHandler( this, &SchemaCollectionSample::ValidationCallBack );

      //Read and validate the XML data.
      while ( vreader->Read() )
      {}

      Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful" : "failed") );
      Console::WriteLine();

      //Close the reader.
      vreader->Close();
   }

   void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ args )
   {
      m_success = false;
      Console::Write( "\r\n\tValidation error: {0}", args->Message );
   }

};

int main()
{
   gcnew SchemaCollectionSample;
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class SchemaCollectionSample
{
  private const String doc1 = "booksSchema.xml";
  private const String doc2 = "booksSchemaFail.xml";
  private const String doc3 = "newbooks.xml";
  private const String schema = "books.xsd";
  private const String schema1 = "schema1.xdr";

  private XmlTextReader reader=null;
  private XmlValidatingReader vreader = null;
  private Boolean m_success = true;

  public SchemaCollectionSample ()
  {
    //Load the schema collection.
    XmlSchemaCollection xsc = new XmlSchemaCollection();
    xsc.Add("urn:bookstore-schema", schema);  //XSD schema
    xsc.Add("urn:newbooks-schema", schema1);  //XDR schema

    //Validate the files using schemas stored in the collection.
    Validate(doc1, xsc); //Should pass.
    Validate(doc2, xsc); //Should fail.
    Validate(doc3, xsc); //Should fail.
  }

  public static void Main ()
  {
      SchemaCollectionSample validation = new SchemaCollectionSample();
  }

  private void Validate(String filename, XmlSchemaCollection xsc)
  {

     m_success = true;
     Console.WriteLine();
     Console.WriteLine("Validating XML file {0}...", filename.ToString());
     reader = new XmlTextReader (filename);

     //Create a validating reader.
    vreader = new XmlValidatingReader (reader);

     //Validate using the schemas stored in the schema collection.
     vreader.Schemas.Add(xsc);

     //Set the validation event handler
     vreader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
     //Read and validate the XML data.
     while (vreader.Read()){}
     Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful" : "failed"));
     Console.WriteLine();

     //Close the reader.
     vreader.Close();
  }

  private void ValidationCallBack (object sender, ValidationEventArgs args)
  {
     m_success = false;

     Console.Write("\r\n\tValidation error: " + args.Message);
  }
}
Option Strict
Option Explicit

Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

Public Class SchemaCollectionSample
    Private doc1 As String = "booksSchema.xml"
    Private doc2 As String = "booksSchemaFail.xml"
    Private doc3 As String = "newbooks.xml"
    Private schema As String = "books.xsd"
    Private schema1 As String = "schema1.xdr"
    
    Private reader As XmlTextReader = Nothing
    Private vreader As XmlValidatingReader = Nothing
    Private m_success As Boolean = True
    
    Public Sub New()

            'Load the schema collection
            Dim xsc As New XmlSchemaCollection()
            xsc.Add("urn:bookstore-schema", schema) 'XSD schema
            xsc.Add("urn:newbooks-schema", schema1) 'XDR schema

            'Validate the files using schemas stored in the collection.
            Validate(doc1, xsc) 'Should pass.
            Validate(doc2, xsc) 'Should fail.   
            Validate(doc3, xsc) 'Should fail. 
        
    End Sub
    
    Public Shared Sub Main()
        Dim validation As New SchemaCollectionSample()
    End Sub
    
    Private Sub Validate(filename As String, xsc As XmlSchemaCollection)
        
            m_success = True
            Console.WriteLine()
            Console.WriteLine("Validating XML file {0}...", filename.ToString())
            reader = New XmlTextReader(filename)
            
            'Create a validating reader.
            vreader = New XmlValidatingReader(reader)
            
            'Use the schemas stored in the schema collection.
            vreader.Schemas.Add(xsc)
            
            'Set the validation event handler.
            AddHandler vreader.ValidationEventHandler, AddressOf ValidationCallBack
            'Read and validate the XML data.
            While vreader.Read()
            End While
            Console.WriteLine("Validation finished. Validation {0}", IIf(m_success, "successful", "failed"))
            Console.WriteLine()

            'Close the reader.
            vreader.Close()

    End Sub
       
    
    Private Sub ValidationCallBack(sender As Object, args As ValidationEventArgs)
        m_success = False
        
        Console.Write((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))
    End Sub
End Class

此示例使用以下五个输入文件:

booksSchema.xml


<?xml version='1.0'?>
 <bookstore xmlns="urn:bookstore-schema">
   <book genre="autobiography">
     <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">
     <title>The Confidence Man</title>
     <author>
       <first-name>Herman</first-name>
       <last-name>Melville</last-name>
     </author>
     <price>11.99</price>
   </book>
 </bookstore>

booksSchemaFail.xml


<?xml version='1.0'?>
 <bookstore xmlns="urn:bookstore-schema">
   <book>
     <author>
       <first-name>Benjamin</first-name>
       <last-name>Franklin</last-name>
     </author>
   </book>
   <book genre="novel">
     <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">
     <title>The Gorgias</title>
     <author>
       <name>Plato</name>
     </author>
     <price>9.99</price>
   </book>
 </bookstore>

newbooks.xml


<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
  <book genre="novel" style="hardcover">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" style="other">
    <title>The Poisonwood Bible</title>
    <author>
      <first-name>Barbara</first-name>
      <last-name>Kingsolver</last-name>
    </author>
    <price>11.99</price>
  </book>
</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>

schema1.xdr


<?xml version="1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <ElementType name="first-name" content="textOnly"/>
  <ElementType name="last-name" content="textOnly"/>
  <ElementType name="name" content="textOnly"/>
  <ElementType name="price" content="textOnly" dt:type="fixed.14.4"/>
  <ElementType name="author" content="eltOnly" order="one">
    <group order="seq">
      <element type="name"/>
    </group>
    <group order="seq">
      <element type="first-name"/>
      <element type="last-name"/>
    </group>
  </ElementType>
  <ElementType name="title" content="textOnly"/>
  <AttributeType name="genre" dt:type="string"/>
  <AttributeType name="style" dt:type="enumeration"
        dt:values="paperback hardcover"/>
  <ElementType name="book" content="eltOnly">
    <attribute type="genre" required="yes"/>
    <attribute type="style" required="yes"/>
    <element type="title"/>
    <element type="author"/>
    <element type="price"/>
  </ElementType>
  <ElementType name="bookstore" content="eltOnly">
    <element type="book"/>
  </ElementType>
</Schema>

注解

如果 ns 已与集合中的另一个架构相关联,则添加的架构将替换集合中的原始架构。 例如,在以下 C# 代码中,将从集合中删除 authors.xsd,并添加 names.xsd。

schemaColl.Add("urn:author", "authors.xsd");  
schemaColl.Add("urn:author", "names.xsd");  

如果 ns 添加 null 的架构是 XML 架构,则 Add 该方法使用 targetNamespace XML 架构中定义的架构来标识集合中的架构。 如果添加的架构包含对其他命名空间的引用, (通过include``import元素或x-schema属性) ,则应用程序的信任级别将确定如何解析这些其他命名空间。 (在 .NET Framework 版本 1.0 中,始终) 使用默认值XmlUrlResolver

Fully trusted code: 没有用户凭据的默认值 XmlUrlResolver 用于解析任何外部资源。 这些其他命名空间的架构仅用于验证目的加载。 与原始架构不同,这些其他架构不会显式添加到架构集合中。 因此,无法使用任何集合方法或属性访问它们。 如果这些外部资源位于需要身份验证的网络资源上,请使用采用 XmlResolver 其参数之一的重载并指定 XmlResolver 具有所需凭据的重载。

Semi-trusted code: 不会解析外部引用。

备注

如果使用该属性访问该方法XmlSchemaCollection,该方法Add将使用XmlResolver该属性指定的XmlValidatingReader.XmlResolverXmlValidatingReader.Schemas值。

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,已被类XmlSchemaSet替换。

适用于

Add(String, XmlReader)

XmlReader 中包含的架构添加到架构集合中。

public:
 System::Xml::Schema::XmlSchema ^ Add(System::String ^ ns, System::Xml::XmlReader ^ reader);
public System.Xml.Schema.XmlSchema? Add (string? ns, System.Xml.XmlReader reader);
public System.Xml.Schema.XmlSchema Add (string ns, System.Xml.XmlReader reader);
member this.Add : string * System.Xml.XmlReader -> System.Xml.Schema.XmlSchema
Public Function Add (ns As String, reader As XmlReader) As XmlSchema

参数

ns
String

与架构关联的命名空间 URI。 对于 XML 架构,这通常是 targetNamespace

reader
XmlReader

包含要添加的架构的 XmlReader

返回

XmlSchema

添加到架构集合中的 XmlSchema;如果所添加的架构为 XDR 架构,或者如果架构中有编译错误,则为 null

例外

此架构不是有效的架构。

注解

如果 ns 已与集合中的另一个架构相关联,则添加的架构将替换集合中的原始架构。

如果 ns 添加 null 的架构是 XML 架构,则 Add 该方法使用 targetNamespace XML 架构中定义的架构来标识集合中的架构。

如果添加的架构包含对其他命名空间的引用, (通过include``import元素或x-schema属性) ,则应用程序的信任级别将确定如何解析这些其他命名空间。 (在 .NET Framework 版本 1.0 中,始终) 使用默认值XmlUrlResolver

Fully trusted code: 没有用户凭据的默认值 XmlUrlResolver 用于解析任何外部资源。 这些其他命名空间的架构仅用于验证目的加载。 与原始架构不同,这些其他架构不会显式添加到架构集合中。 因此,无法使用任何集合方法或属性访问它们。 如果这些外部资源位于需要身份验证的网络资源上,请使用采用 XmlResolver 其参数之一的重载并指定 XmlResolver 具有所需凭据的重载。

Semi-trusted code: 不会解析外部引用。

备注

如果使用该属性访问该方法XmlSchemaCollection,该方法Add将使用XmlResolver该属性指定的XmlValidatingReader.XmlResolverXmlValidatingReader.Schemas值。

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,已被类XmlSchemaSet替换。

适用于

Add(XmlSchema, XmlResolver)

XmlSchema 添加到集合。 用指定的 XmlResolver 解析任何外部引用。

public:
 System::Xml::Schema::XmlSchema ^ Add(System::Xml::Schema::XmlSchema ^ schema, System::Xml::XmlResolver ^ resolver);
public System.Xml.Schema.XmlSchema? Add (System.Xml.Schema.XmlSchema schema, System.Xml.XmlResolver? resolver);
public System.Xml.Schema.XmlSchema Add (System.Xml.Schema.XmlSchema schema, System.Xml.XmlResolver resolver);
member this.Add : System.Xml.Schema.XmlSchema * System.Xml.XmlResolver -> System.Xml.Schema.XmlSchema
Public Function Add (schema As XmlSchema, resolver As XmlResolver) As XmlSchema

参数

schema
XmlSchema

要添加到集合中的 XmlSchema

resolver
XmlResolver

用于解析 includeimport 元素中引用的命名空间的 XmlResolver。 如果这为 null,则不解析外部引用。

返回

XmlSchema

添加到架构集合中的 XmlSchema

例外

此架构不是有效的架构。

示例

以下示例将架构添加到集合中。 传递给XmlUrlResolverAdd方法,该方法设置访问架构中引用的任何外部资源所需的必要凭据。

XmlSchemaCollection^ sc = gcnew XmlSchemaCollection;
sc->ValidationEventHandler += gcnew ValidationEventHandler( Sample::ValidationCallBack );

// Create a resolver with the necessary credentials.
XmlUrlResolver^ resolver = gcnew XmlUrlResolver;
System::Net::NetworkCredential^ nc;
nc = gcnew System::Net::NetworkCredential( UserName,SecurelyStoredPassword,Domain );
resolver->Credentials = nc;

// Add the new schema to the collection.
sc->Add( nullptr, gcnew XmlTextReader( "sample.xsd" ), resolver );
XmlSchemaCollection sc = new XmlSchemaCollection();
sc.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

// Create a resolver with the necessary credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Add the new schema to the collection.
sc.Add("", new XmlTextReader("sample.xsd"), resolver);
Dim sc As XmlSchemaCollection = New XmlSchemaCollection()
AddHandler sc.ValidationEventHandler, AddressOf ValidationCallBack

' Create a resolver with the necessary credentials.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

' Add the new schema to the collection.
sc.Add("", New XmlTextReader("sample.xsd"), resolver)

注解

targetNamespace 属性用于标识此架构。

如果架构包含 include 引用 import 其他命名空间的元素,则仅出于验证目的加载这些其他命名空间的架构。 与原始架构不同,这些其他架构不会显式添加到架构集合中。 因此,无法使用任何集合方法或属性访问它们。

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,已被类XmlSchemaSet替换。

另请参阅

适用于

Add(String, XmlReader, XmlResolver)

XmlReader 中包含的架构添加到架构集合中。 指定的 XmlResolver 用于解析任何可能引用的外部资源。

public:
 System::Xml::Schema::XmlSchema ^ Add(System::String ^ ns, System::Xml::XmlReader ^ reader, System::Xml::XmlResolver ^ resolver);
public System.Xml.Schema.XmlSchema? Add (string? ns, System.Xml.XmlReader reader, System.Xml.XmlResolver? resolver);
public System.Xml.Schema.XmlSchema Add (string ns, System.Xml.XmlReader reader, System.Xml.XmlResolver resolver);
member this.Add : string * System.Xml.XmlReader * System.Xml.XmlResolver -> System.Xml.Schema.XmlSchema
Public Function Add (ns As String, reader As XmlReader, resolver As XmlResolver) As XmlSchema

参数

ns
String

与架构关联的命名空间 URI。 对于 XML 架构,这通常是 targetNamespace

reader
XmlReader

包含要添加的架构的 XmlReader

resolver
XmlResolver

用于解析 includeimport 元素或 x-schema 特性(XDR 架构)中引用的命名空间的 XmlResolver。 如果这为 null,则不解析外部引用。

返回

XmlSchema

添加到架构集合中的 XmlSchema;如果所添加的架构为 XDR 架构,或者如果架构中有编译错误,则为 null

例外

此架构不是有效的架构。

注解

如果 ns 已与集合中的另一个架构相关联,则添加的架构将替换集合中的原始架构。

如果 ns 添加的 null 架构是 XML 架构,该方法 Add 将使用 targetNamespace XML 架构中定义的属性来标识集合中的架构。

如果要添加的架构包含对其他命名空间的引用, (通过include``import元素或x-schema属性) ,则仅出于验证目的加载这些其他命名空间的架构。 与原始架构不同,这些其他架构不会显式添加到架构集合中。 因此,无法使用任何集合方法或属性访问它们。

重要

XmlSchemaCollection类在 .NET Framework 版本 2.0 中已过时,并且已替换为该XmlSchemaSet类。

另请参阅

适用于