다음을 통해 공유


XmlValidatingReader를 사용하여 XML 조각 읽기

업데이트: November 2007

XmlValidatingReader 클래스는 문자열을 XML 조각으로 분석하여 XML 조각을 읽을 수 있습니다.

참고:

XmlValidatingReader 클래스는 .NET Framework 버전 2.0에서 사용되지 않습니다. XmlReaderSettings 클래스와 Create 메서드를 사용하여 유효성 검사 XmlReader 인스턴스를 만들 수 있습니다. 자세한 내용은 XmlReader를 사용하여 XML 데이터의 유효성 검사를 참조하십시오.

XmlParserContext 클래스

XmlParserContext 클래스는 XML 조각 또는 문서를 구문 분석하는 데 필요한 컨텍스트 정보로 XmlValidatingReader 개체를 구성하는 데 사용됩니다. XmlParserContext 클래스에서는 사용할 XmlNameTable, 네임스페이스 범위, DTD(문서 종류 정의), 인코딩, 현재 xml:lang 및 xml:space 범위와 같은 정보를 제공할 수 있습니다.

XmlValidatingReader 개체를 구성할 때는 XML 노드 형식도 지정해야 합니다. XML 노드 형식은 데이터가 조각으로 구문 분석될지, 아니면 제대로 구성된 XML 문서로 구문 분석될지를 결정합니다. 다음 표에서는 노드 형식과 파서에서 예상되는 데이터 형식의 목록을 보여 줍니다. 다른 XmlNodeType 값을 전달하면 ArgumentException이 throw됩니다.

형식

조각에 포함된 내용

Element

요소 조합, 주석, 처리 명령, CDATA 및 텍스트를 포함하는 유효한 모든 요소 내용입니다.

XML 선언은 첫 번째 노드에서 발생할 수도 있습니다. XML 조각에 대한 인코딩을 지정할 수 있습니다.

Attribute

특성 값입니다.

Document

전체 XML 문서의 내용입니다. 이 형식에서는 XML을 제대로 구성하기 위한 문서 규칙이 적용됩니다.

요소 또는 특성 내용에 있는 엔터티 참조는 EntityHandling 플래그에 따라 처리됩니다. 엔터티를 확인하는 데 사용하는 DTD 정보를 전달할 수 있을 뿐 아니라 XmlParserContext 클래스를 사용하여 기본 특성을 추가할 수도 있습니다.

ValidationType 속성이 DTD나 Auto이고 엔터티 확인과 기본 특성 추가가 중요한 경우 PUBLIC 리터럴, SYSTEM 리터럴 및 내부 DTD 하위 집합을 포함하는 XmlParserContext 생성자가 필요합니다. 다른 모든 유효성 검사 형식의 경우 스키마와 같이 DTD 속성이 없는 XmlParserContext를 제공할 수 있습니다. XML 조각의 유효성 검사에 사용하는 모든 스키마는 XmlSchemaCollection에 추가하거나 XML 조각 내에서 직접 참조해야 합니다. XmlParserContext를 사용하여 네임스페이스 확인과 같은 추가 정보, DTD 정보 및 XML 조각을 구문 분석하는 데 필요한 정보 등을 제공할 수 있습니다.

ValidationType 속성이 DTD로 설정되어 있고 XmlParserContext에 DTD 속성이 포함되어 있지 않으면 ArgumentException이 발생합니다.

예제

다음 코드 예제에서는 XmlValidatingReader를 사용하여 XML 조각을 읽고 콘솔에 기록합니다.

Imports System
Imports System.Xml
 
Public Class Sample
  
   Overloads Public Shared Sub Main(args() As [String])
      Dim vr As New XmlValidatingReader("<element1> abc </element1>  <element2> qrt </element2> <?pi asldfjsd ?> <!-- comment -->", XmlNodeType.Element, Nothing)
      While vr.Read()
         Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name)
      End While
   End Sub
   ' Main
End Class
' Sample
using System;
using System.Xml;

public class Sample 
{
  public static void Main (String[] args) 
  {
  XmlValidatingReader vr = new XmlValidatingReader("<element1> abc </element1>  <element2> qrt </element2> <?pi asldfjsd ?> <!-- comment -->", XmlNodeType.Element, null);
        while(vr.Read())
    Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
   }
}

다음 코드 예제에서는 XmlNamespaceManager에서 필요한 네임스페이스를 제공하기 위해 XmlParserContext를 사용하는 XML 조각을 읽습니다.

Imports System
Imports System.IO
Imports System.Xml
 
Public Class Sample
   
   Public Shared Sub Main()
      
      Dim xmlFrag As String = "<book><bk:genre>&n;</bk:genre></book>"
      Dim nt As New NameTable()
      Dim nsmanager As New XmlNamespaceManager(nt)
      ' Add a default namespace.
      nsmanager.AddNamespace(String.Empty, "www.microsoft.com")
      nsmanager.AddNamespace("bk", "www.microsoft.com/books")
      Dim internalContent As String = "<!ENTITY n 'novel'>"
      Dim context As New XmlParserContext(nt, nsmanager, "elem", Nothing, Nothing, internalContent, String.Empty, String.Empty, XmlSpace.None)
      Dim r As New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
      r.ValidationType = ValidationType.None
      r.EntityHandling = EntityHandling.ExpandEntities
      While r.Read()
         Console.WriteLine("{0},{1},{2}", r.NodeType, r.Name, r.Value)
      End While 
   End Sub
   ' Main
End Class
' Sample
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {

      string xmlFrag = "<book><bk:genre>&n;</bk:genre></book>";
      NameTable nt = new NameTable();
      XmlNamespaceManager nsmanager = new XmlNamespaceManager(nt);
     // Add a default namespace.
     nsmanager.AddNamespace (string.Empty, "www.microsoft.com");
     nsmanager.AddNamespace ("bk", "www.microsoft.com/books");
     string internalContent = "<!ENTITY n 'novel'>";
     XmlParserContext context = new XmlParserContext(nt, nsmanager, "elem",null, null, internalContent, string.Empty,
string.Empty, XmlSpace.None);
     XmlValidatingReader r = new XmlValidatingReader(xmlFrag, XmlNodeType.Element, context);
     r.ValidationType = ValidationType.None;
     r.EntityHandling = EntityHandling.ExpandEntities;
     while(r.Read())
        Console.WriteLine("{0},{1},{2}",r.NodeType, r.Name, r.Value);

  }
}

ValidationType 속성이 DTD로 설정된 경우에는 정의에 따라 DTD에서 유효성 검사를 수행하려면 전체 문서를 로드해야 하므로 조각 구문 분석을 할 수 없습니다.

참고 항목

개념

XmlReader로 XML 읽기

기타 리소스

XmlReader 클래스 사용