XmlValidatingReader 构造函数

定义

初始化 XmlValidatingReader 类的新实例。

重载

XmlValidatingReader(XmlReader)

初始化 XmlValidatingReader 类的新实例,该类验证从给定的 XmlReader 返回的内容。

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

用指定的值初始化 XmlValidatingReader 类的新实例。

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

用指定的值初始化 XmlValidatingReader 类的新实例。

XmlValidatingReader(XmlReader)

初始化 XmlValidatingReader 类的新实例,该类验证从给定的 XmlReader 返回的内容。

public:
 XmlValidatingReader(System::Xml::XmlReader ^ reader);
public XmlValidatingReader (System.Xml.XmlReader reader);
new System.Xml.XmlValidatingReader : System.Xml.XmlReader -> System.Xml.XmlValidatingReader
Public Sub New (reader As XmlReader)

参数

reader
XmlReader

验证时要从中读取的 XmlReader。 当前实现仅支持 XmlTextReader

例外

指定的读取器不是 XmlTextReader

示例

以下示例验证两个文档。

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;
public ref class Sample
{
private:
   static Boolean m_success = true;

public:
   Sample()
   {
      
      // Validate the document using an external XSD schema.  Validation should fail.
      Validate( "notValidXSD.xml" );
      
      // Validate the document using an inline XSD. Validation should succeed.
      Validate( "inlineXSD.xml" );
   }


private:

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

   void Validate( String^ filename )
   {
      m_success = true;
      Console::WriteLine( "\r\n******" );
      Console::WriteLine( "Validating XML file {0}", filename );
      XmlTextReader^ txtreader = gcnew XmlTextReader( filename );
      XmlValidatingReader^ reader = gcnew XmlValidatingReader( txtreader );
      
      // Set the validation event handler
      reader->ValidationEventHandler += gcnew ValidationEventHandler( this, &Sample::ValidationCallBack );
      
      // Read XML data
      while ( reader->Read() )
      {}

      Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful!" : "failed.") );
      
      // Close the reader.
      reader->Close();
   }

};

int main()
{
   Sample^ validation = gcnew Sample;
}

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class Sample
{

  private Boolean m_success = true;

  public Sample ()
  {
      //Validate the document using an external XSD schema.  Validation should fail.
      Validate("notValidXSD.xml");

      //Validate the document using an inline XSD. Validation should succeed.
      Validate("inlineXSD.xml");
  }

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

  private void Validate(String filename)
  {
      m_success = true;
      Console.WriteLine("\r\n******");
      Console.WriteLine("Validating XML file " + filename.ToString());
      XmlTextReader txtreader = new XmlTextReader (filename);
      XmlValidatingReader reader = new XmlValidatingReader (txtreader);

      // Set the validation event handler
      reader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

      // Read XML data
      while (reader.Read()){}
      Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful!" : "failed."));

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

  //Display the validation error.
  private void ValidationCallBack (object sender, ValidationEventArgs args)
  {
     m_success = false;
     Console.WriteLine("\r\n\tValidation error: " + args.Message );
  }
}
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

public class Sample

  private m_success as Boolean = true

  public sub New ()
      'Validate the document using an external XSD schema.  Validation should fail.
      Validate("notValidXSD.xml") 

      'Validate the document using an inline XSD. Validation should succeed.
      Validate("inlineXSD.xml")
  end sub

  public shared sub Main ()
 
      Dim validation as Sample = new Sample()
  end sub

  private sub Validate(filename as String)

      m_success = true
      Console.WriteLine()
      Console.WriteLine("******")
      Console.WriteLine("Validating XML file " + filename.ToString())
      Dim txtreader as XmlTextReader = new XmlTextReader (filename)
      Dim reader as XmlValidatingReader = new XmlValidatingReader (txtreader)

      ' Set the validation event handler
      AddHandler reader.ValidationEventHandler, AddressOf ValidationCallBack

      ' Read XML data
      while (reader.Read())
      end while
      Console.WriteLine ("Validation finished. Validation {0}", IIf(m_success, "successful!", "failed."))

      'Close the reader.
      reader.Close()
  end sub

  'Display the validation error.
  Private sub ValidationCallBack (sender as object, args as ValidationEventArgs)

     m_success = false
     Console.WriteLine()
     Console.WriteLine("  Validation error: " + args.Message )
  end sub
end class

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

notValidXSD.xml

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:bookstore-schema books.xsd">
  <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>
</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>

inlineXSD.xml

<store-data>
<!--Inline XSD schema-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <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="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>
</xsd:schema>
<!-- end of schema -->

<bookstore>
  <book genre="novel">
    <title>Pride And Prejudice</title>
    <price>19.95</price>
  </book>
</bookstore>
</store-data>

注解

备注

XmlValidatingReader在 .NET Framework 2.0 中已过时。 可以使用类和Create方法创建验证XmlReader实例XmlReaderSettings。 有关详细信息,请参阅 XmlReader 引用页的“备注”部分。

从给定 XmlReader 返回的所有节点也从此验证读取器返回,因此在此过程中不会丢失任何信息。 从基础读取器返回的新节点可能由此读取器 (添加,例如,默认属性和实体引用的子级) 。 给定 XmlTextReader 上设置的任何属性也适用于此验证读取器。 例如,如果提供的读取器设置了 WhitespaceHandling.None,则此验证读取器也会忽略空格。

当外部文档类型定义 (DTD) 或架构进行验证时,该 XmlResolver 属性将设置 XmlResolver 用于解析外部资源的对象。

另请参阅

适用于

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

用指定的值初始化 XmlValidatingReader 类的新实例。

public:
 XmlValidatingReader(System::IO::Stream ^ xmlFragment, System::Xml::XmlNodeType fragType, System::Xml::XmlParserContext ^ context);
public XmlValidatingReader (System.IO.Stream xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);
new System.Xml.XmlValidatingReader : System.IO.Stream * System.Xml.XmlNodeType * System.Xml.XmlParserContext -> System.Xml.XmlValidatingReader
Public Sub New (xmlFragment As Stream, fragType As XmlNodeType, context As XmlParserContext)

参数

xmlFragment
Stream

包含要分析的 XML 片段的流。

fragType
XmlNodeType

XML 片段的 XmlNodeType。 这确定片段可以包含的内容(请参见下表)。

context
XmlParserContext

要在其中分析 XML 片段的 XmlParserContext。 这包括要使用的 XmlNameTable、编码、命名空间范围、当前的 xml:langxml:space 范围。

例外

fragType 不是下表列出的节点类型之一。

注解

备注

XmlValidatingReader在 .NET Framework 2.0 中已过时。 可以使用类和Create方法创建验证XmlReader实例XmlReaderSettings。 有关详细信息,请参阅 XmlReader 引用页的“备注”部分。

此构造函数将给定字符串分析为 XML 片段。 如果 XML 片段是元素或属性,则可以绕过格式良好的 XML 文档的根级别规则。

下表列出了有效值 fragType 以及读取器如何分析每个不同节点类型。

XmlNodeType 片段可能包含
元素 例如,任何有效的元素内容 (元素、注释、处理指令、cdata、文本和实体引用) 。
Attribute 属性的值 (引号中的部件) 。
文档 整个 XML 文档的内容;这会强制实施文档级别规则。

读取器使用以下步骤来确定流的编码:

  1. XmlParserContext.Encoding检查属性以确定编码。

  2. Encoding如果该属性为null,读取器将检查流开头的字节顺序标记。

  3. Encoding如果属性为null,且未找到字节顺序标记,则读取器假定流采用 UTF-8 编码。

如果此读取者将使用文档类型定义 (DTD) ((即,设置为 ValidationType.DTD 或 ValidationType.Auto) )验证, ValidationType XmlParserContext 则构造函数中指定的必须提供所有必要的 DocumentType 信息。

备注

无法使用 DTD 验证片段。 根据定义,DTD 需要加载整个文档才能进行验证。

如果此读取器将使用 XML-Data Reduced (XDR) 或 XML 架构定义语言 (XSD) 架构来验证,请使用 Schemas 该属性指定 XmlSchemaCollection 包含架构 ((即, XmlParserContext 不需要提供 DocumentType 信息) )。

另请参阅

适用于

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

用指定的值初始化 XmlValidatingReader 类的新实例。

public:
 XmlValidatingReader(System::String ^ xmlFragment, System::Xml::XmlNodeType fragType, System::Xml::XmlParserContext ^ context);
public XmlValidatingReader (string xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);
new System.Xml.XmlValidatingReader : string * System.Xml.XmlNodeType * System.Xml.XmlParserContext -> System.Xml.XmlValidatingReader
Public Sub New (xmlFragment As String, fragType As XmlNodeType, context As XmlParserContext)

参数

xmlFragment
String

包含要分析的 XML 片段的字符串。

fragType
XmlNodeType

XML 片段的 XmlNodeType。 这还确定了片段字符串可以包含的内容(请参见下表)。

context
XmlParserContext

要在其中分析 XML 片段的 XmlParserContext。 这包括要使用的 NameTable、编码、命名空间范围、当前 xml:lang 和 xml:space 范围。

例外

fragType 不是下表列出的节点类型之一。

示例

以下示例读取 XML 片段。 它使用 a XmlParserContext 和它 XmlNamespaceManager 来处理命名空间匹配。

using System;
using System.IO;
using System.Xml;

public class Sample
{
    public static void Main()
    {
        XmlTextReader reader = null;

        try
        {
            //Create the XML fragment to be parsed.
            string xmlFrag = "<book> " +
                            "<title>Pride And Prejudice</title>" +
                            "<bk:genre>novel</bk:genre>" +
                            "</book>";

            //Create the XmlNamespaceManager that is used to
            //look up namespace information.
            NameTable nt = new NameTable();
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
            nsmgr.AddNamespace("bk", "urn:sample");

            //Create the XmlParserContext.
            XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);

            //Implement the reader.
            reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);

            //Parse the XML fragment.  If they exist, display the
            //prefix and namespace URI of each element.
            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    if (string.IsNullOrEmpty(reader.Prefix))
                    {
                        Console.WriteLine("<{0}>", reader.LocalName);
                    }
                    else
                    {
                        Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
                        Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
                    }
                }
            }
        }

        finally
        {
            if (reader != null)
                reader.Close();
        }
    }
} // End class
Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()
        Dim reader As XmlTextReader = Nothing

        Try
            'Create the XML fragment to be parsed.
            Dim xmlFrag As String = "<book> " & _
                                    "<title>Pride And Prejudice</title>" & _
                                    "<bk:genre>novel</bk:genre>" & _
                                    "</book>"

            'Create the XmlNamespaceManager that is used to
            'look up namespace information.
            Dim nt As New NameTable()
            Dim nsmgr As New XmlNamespaceManager(nt)
            nsmgr.AddNamespace("bk", "urn:sample")

            'Create the XmlParserContext.
            Dim context As New XmlParserContext(Nothing, nsmgr, Nothing, XmlSpace.None)

            'Implement the reader. 
            reader = New XmlTextReader(xmlFrag, XmlNodeType.Element, context)

            'Parse the XML fragment.  If they exist, display the   
            'prefix and namespace URI of each element.
            While reader.Read()
                If reader.IsStartElement() Then
                    If reader.Prefix = String.Empty Then
                        Console.WriteLine("<{0}>", reader.LocalName)
                    Else
                        Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName)
                        Console.WriteLine(" The namespace URI is " & reader.NamespaceURI)
                    End If
                End If
            End While
        Finally
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try
    End Sub
End Class

注解

备注

XmlValidatingReader在 .NET Framework 2.0 中已过时。 可以使用类和Create方法创建验证XmlReader实例XmlReaderSettings。 有关详细信息,请参阅 XmlReader 引用页的“备注”部分。

此构造函数将给定字符串分析为 XML 片段。 如果 XML 片段是元素或属性,则可以绕过格式良好的 XML 文档的根级别规则。 此构造函数可以处理从中返回的 ReadInnerXml字符串。

下表列出了有效值 fragType 以及读取器如何分析每个不同节点类型。

XmlNodeType 片段可能包含
元素 例如,任何有效的元素内容 (元素、注释、处理指令、cdata、文本和实体引用) 。
Attribute 属性的值 (引号中的部件) 。
文档 整个 XML 文档的内容;这会强制实施文档级别规则。

如果此读取者将使用文档类型定义 (DTD) ((即验证 ValidationType 类型定义)设置为 ValidationType.DTD 或 ValidationType.Auto) , XmlParserContext 则构造函数中指定的必须提供所有必要的 DocumentType 信息。

备注

无法使用 DTD 验证片段。 根据定义,DTD 需要加载整个文档才能进行验证。

如果此读取器将使用XML-Data缩减 (XDR) 或 XML 架构定义语言 (XSD) 架构来验证,请使用 Schemas 该属性指定 XmlSchemaCollection 包含架构 (XmlParserContext 不需要提供 DocumentType 信息) 的架构。

另请参阅

适用于