다음을 통해 공유


XmlValidatingReader 생성자

정의

XmlValidatingReader 클래스의 새 인스턴스를 초기화합니다.

오버로드

XmlValidatingReader(XmlReader)

주어진 XmlReader에서 반환된 콘텐츠의 유효성을 검사하는 XmlValidatingReader 클래스의 새 인스턴스를 초기화합니다.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

지정된 값을 사용하여 XmlValidatingReader 클래스의 새 인스턴스를 초기화합니다.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

지정된 값을 사용하여 XmlValidatingReader 클래스의 새 인스턴스를 초기화합니다.

XmlValidatingReader(XmlReader)

Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs

주어진 XmlReader에서 반환된 콘텐츠의 유효성을 검사하는 XmlValidatingReader 클래스의 새 인스턴스를 초기화합니다.

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에서 사용되지 않습니다. 클래스 및 메서드를 XmlReader 사용하여 유효성 검사 인스턴스를 XmlReaderSettingsCreate 만들 수 있습니다. 자세한 내용은 XmlReader 참조 페이지의 설명 섹션을 참조하세요.

지정된 XmlReader 에서 반환된 모든 노드도 이 유효성 검사 판독기에서 반환되므로 프로세스에 정보 손실이 없습니다. 기본 판독기에서 반환되지 않은 새 노드는 이 판독기에서 추가할 수 있습니다(예: 기본 특성 및 엔터티 참조의 자식). 지정된 XmlTextReader 에 설정된 모든 속성은 이 유효성 검사 판독기에도 적용됩니다. 예를 들어 제공된 판독기가 WhitespaceHandling.None을 설정한 경우 이 유효성 검사 판독기는 공백도 무시합니다.

유효성 검사를 위해 외부 DTD(문서 형식 정의) 또는 스키마가 필요한 경우 속성은 XmlResolver 외부 리소스를 확인하는 데 사용할 개체를 설정합니다 XmlResolver .

추가 정보

적용 대상

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs

지정된 값을 사용하여 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에서 사용되지 않습니다. 클래스 및 메서드를 XmlReader 사용하여 유효성 검사 인스턴스를 XmlReaderSettingsCreate 만들 수 있습니다. 자세한 내용은 XmlReader 참조 페이지의 설명 섹션을 참조하세요.

이 생성자는 지정된 문자열을 XML의 조각으로 구문 분석합니다. XML 조각이 요소 또는 특성인 경우 올바른 형식의 XML 문서에 대한 루트 수준 규칙을 무시할 수 있습니다.

다음 표에서는 판독기가 서로 다른 각 노드 형식을 구문 분석하는 방법과 에 대한 fragType 유효한 값을 나열합니다.

XmlNodeType 조각에 포함할 수 있음
요소 모든 유효한 요소 콘텐츠(예: 요소, 주석, 처리 명령, cdata, 텍스트 및 엔터티 참조의 조합).
attribute 특성의 값(따옴표 안의 부분)입니다.
문서 전체 XML 문서의 내용입니다. 이렇게 하면 문서 수준 규칙이 적용됩니다.

판독기는 다음 단계를 사용하여 스트림의 인코딩을 확인합니다.

  1. XmlParserContext.Encoding 속성을 확인하여 인코딩을 확인합니다.

  2. 속성이 인 Encoding 경우 판독기는 null스트림의 시작 부분에서 바이트 순서 표시를 확인합니다.

  3. 속성이 Encodingnull고 바이트 순서 표시를 찾을 수 없는 경우 판독기는 스트림이 UTF-8로 인코딩된 것으로 가정합니다.

이 판독기가 DTD(문서 형식 정의)를 사용하여 유효성을 검사하는 경우(즉, ValidationType ValidationType.DTD 또는 ValidationType.Auto로 설정됨) XmlParserContext 생성자에 지정된 가 필요한 모든 DocumentType 정보를 제공해야 합니다.

참고

DTD를 사용하여 조각의 유효성을 검사할 수 없습니다. 정의상 DTD는 유효성 검사를 위해 전체 문서를 로드해야 합니다.

이 판독기가 XDR(XML-Data 축소) 또는 XSD(XML 스키마 정의 언어) 스키마를 사용하여 유효성을 검사하는 경우 속성을 사용하여 Schemas 스키마가 포함된 를 지정 XmlSchemaCollection 합니다(즉, XmlParserContext 는 DocumentType 정보를 제공할 필요가 없음).

추가 정보

적용 대상

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs

지정된 값을 사용하여 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 조각을 읽습니다. 및 를 사용하여 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에서 사용되지 않습니다. 클래스 및 메서드를 XmlReader 사용하여 유효성 검사 인스턴스를 XmlReaderSettingsCreate 만들 수 있습니다. 자세한 내용은 XmlReader 참조 페이지의 설명 섹션을 참조하세요.

이 생성자는 지정된 문자열을 XML의 조각으로 구문 분석합니다. XML 조각이 요소 또는 특성인 경우 올바른 형식의 XML 문서에 대한 루트 수준 규칙을 무시할 수 있습니다. 이 생성자는 에서 ReadInnerXml반환된 문자열을 처리할 수 있습니다.

다음 표에서는 판독기가 서로 다른 각 노드 형식을 구문 분석하는 방법과 에 대한 fragType 유효한 값을 나열합니다.

XmlNodeType 조각에 포함할 수 있음
요소 모든 유효한 요소 콘텐츠(예: 요소, 주석, 처리 명령, cdata, 텍스트 및 엔터티 참조의 조합).
attribute 특성의 값(따옴표 안의 부분)입니다.
문서 전체 XML 문서의 내용입니다. 이렇게 하면 문서 수준 규칙이 적용됩니다.

이 판독기가 DTD(문서 형식 정의)를 사용하여 유효성을 검사하는 경우(즉, ValidationType ValidationType.DTD 또는 ValidationType.Auto로 설정됨) XmlParserContext 생성자에 지정된 가 필요한 모든 DocumentType 정보를 제공해야 합니다.

참고

DTD를 사용하여 조각의 유효성을 검사할 수 없습니다. 정의상 DTD는 유효성 검사를 위해 전체 문서를 로드해야 합니다.

이 판독기가 XDR(XML-Data 축소) 또는 XSD(XML 스키마 정의 언어) 스키마를 사용하여 유효성을 검사하는 경우 속성을 사용하여 Schemas 스키마가 포함된 를 지정 XmlSchemaCollection 합니다( XmlParserContext 는 DocumentType 정보를 제공할 필요가 없음).

추가 정보

적용 대상