XmlReader 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
빠르고, 캐시되지 않으며 앞으로만 이동 가능한 XML 데이터 액세스를 제공하는 판독기를 나타냅니다.
public ref class XmlReader abstract : IDisposable
public ref class XmlReader abstract
public abstract class XmlReader : IDisposable
public abstract class XmlReader
type XmlReader = class
interface IDisposable
type XmlReader = class
Public MustInherit Class XmlReader
Implements IDisposable
Public MustInherit Class XmlReader
- 상속
-
XmlReader
- 파생
- 구현
예제
다음 예제 코드에서는 비동기 API를 사용하여 XML을 구문 분석하는 방법을 보여 줍니다.
async Task TestReader(System.IO.Stream stream)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Async = true;
using (XmlReader reader = XmlReader.Create(stream, settings))
{
while (await reader.ReadAsync())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine("Start Element {0}", reader.Name);
break;
case XmlNodeType.Text:
Console.WriteLine("Text Node: {0}",
await reader.GetValueAsync());
break;
case XmlNodeType.EndElement:
Console.WriteLine("End Element {0}", reader.Name);
break;
default:
Console.WriteLine("Other node {0} with value {1}",
reader.NodeType, reader.Value);
break;
}
}
}
}
Public Async Function TestReader(stream As System.IO.Stream) As Task
Dim settings As New XmlReaderSettings()
settings.Async = True
Using reader As XmlReader = XmlReader.Create(stream, settings)
While (Await reader.ReadAsync())
Select Case (reader.NodeType)
Case XmlNodeType.Element
Console.WriteLine("Start Element {0}", reader.Name)
Case XmlNodeType.Text
Console.WriteLine("Text Node: {0}",
Await reader.GetValueAsync())
Case XmlNodeType.EndElement
Console.WriteLine("End Element {0}", reader.Name)
Case Else
Console.WriteLine("Other node {0} with value {1}",
reader.NodeType, reader.Value)
End Select
End While
End Using
End Function
설명
XmlReader 는 문서 또는 스트림의 XML 데이터에 대한 전방 전용 읽기 전용 액세스를 제공합니다. 이 클래스는 W3C XML(Extensible Markup Language) 1.0(네 번째 버전) 및 XML 1.0(세 번째 버전) 권장 사항의 네임스페이스를 준수합니다.
XmlReader 메서드를 사용하면 XML 데이터를 이동하고 노드의 내용을 읽을 수 있습니다. 클래스의 속성은 판독기 위치인 현재 노드의 값을 반영합니다. 속성 값은 ReadState XML 판독기의 현재 상태를 나타냅니다. 예를 들어 속성은 메서드 및 ReadState.Closed 메서드에 XmlReader.Read 의해 설정 ReadState.Initial 됩니다XmlReader.Close. XmlReader 또한 DTD 또는 스키마에 대한 데이터 규칙 검사 및 유효성 검사를 제공합니다.
XmlReader 는 끌어오기 모델을 사용하여 데이터를 검색합니다. 이 모델은 다음과 같습니다.
자연스러운 하향식 절차적 구체화를 통해 상태 관리를 간소화합니다.
여러 입력 스트림 및 계층을 지원합니다.
클라이언트가 파서에 문자열이 직접 작성되는 버퍼를 제공할 수 있으므로 추가 문자열 복사가 필요 없습니다.
선택적 처리를 지원합니다. 클라이언트 항목을 건너뛰고 애플리케이션에 관심 있는 것을 처리 합니다. 미리 속성을 설정하여 XML 스트림이 처리되는 방식(예: 정규화)을 관리할 수도 있습니다.
이 섹션에서는 다음 작업을 수행합니다.
XML 판독 기 만들기 XML 데이터 유효성 검사 데이터 규칙 노드 탐색 XML 요소 읽기 XML 특성 읽기 XML 콘텐츠 읽기 CLR 형식 으로 변환 비동기 프로그래밍 보안 고려 사항
XML 판독기 만들기
메서드를 Create 사용하여 인스턴스를 만듭니다 XmlReader .
.NET Framework 클래스(예: XmlTextReader, XmlNodeReader및 XmlValidatingReader 클래스)의 XmlReader 구체적인 구현을 제공하지만 이러한 시나리오에서만 특수화된 클래스를 사용하는 것이 좋습니다.
개체에서 XML DOM 하위 트리를 XmlNode 읽으려면 클래스를 XmlNodeReader 사용합니다. 그러나 이 클래스는 DTD 또는 스키마 유효성 검사를 지원하지 않습니다.
요청 시 엔터티를 확장해야 하는 경우 텍스트 콘텐츠를 정규화하지 않거나 기본 특성이 반환되지 않도록 하려면 클래스를 XmlTextReader 사용합니다.
XML 판독기에서 사용하도록 설정할 기능 집합을 지정하려면 개체를 System.Xml.XmlReaderSettings 메서드에 Create 전달합니다. 단일 System.Xml.XmlReaderSettings 개체를 사용하여 동일한 기능을 가진 여러 판독기를 만들거나 개체를 System.Xml.XmlReaderSettings 수정하여 다른 기능 집합으로 새 판독기를 만들 수 있습니다. 기존 판독기에도 기능을 쉽게 추가할 수 있습니다.
개체를 System.Xml.XmlReaderSettings 사용하지 않는 경우 기본 설정이 사용됩니다. Create 자세한 내용은 참조 페이지를 참조하세요.
XmlReader 는 XmlException ON XML 구문 분석 오류를 throw합니다. 예외가 throw된 후에는 판독기의 상태를 예측할 수 없습니다. 예를 들어 보고된 노드 형식은 현재 노드의 실제 노드 형식과 다를 수 있습니다. 이 ReadState 속성을 사용하여 판독기가 오류 상태인지 확인합니다.
XML 데이터 유효성 검사
XML 문서의 구조와 요소 관계, 데이터 형식 및 콘텐츠 제약 조건을 정의하려면 DTD(문서 형식 정의) 또는 XSD(XML 스키마 정의 언어) 스키마를 사용합니다. XML 문서는 W3C XML 1.0 권장 사항에 정의된 모든 구문 요구 사항을 충족하는 경우 올바른 형식으로 간주됩니다. 올바른 형식이고 DTD 또는 스키마에서 정의한 제약 조건을 준수하는 경우 유효한 것으로 간주됩니다. ( W3C XML 스키마 1부: 구조 체 및 W3C XML 스키마 파트 2: 데이터 형식 권장 사항을 참조하세요.) 따라서 모든 유효한 XML 문서가 올바른 형식이지만 올바른 형식의 XML 문서가 모두 유효하지는 않습니다.
DTD, 인라인 XSD 스키마 또는 개체(캐시)에 저장된 XSD 스키마에 XmlSchemaSet 대해 데이터의 유효성을 검사할 수 있습니다. 이러한 시나리오는 참조 페이지에 설명되어 Create 있습니다. XmlReader 에서는 XDR(XML-Data 축소) 스키마 유효성 검사를 지원하지 않습니다.
클래스에서 XmlReaderSettings 다음 설정을 사용하여 인스턴스가 지원하는 유효성 검사 유형(있는 경우)을 XmlReader 지정합니다.
이 XmlReaderSettings 멤버 사용 | 지정할 함수 |
---|---|
DtdProcessing 속성 | DTD 처리를 허용할지 여부입니다. 기본값은 DTD 처리를 허용하지 않는 것입니다. |
ValidationType 속성 | 판독기가 데이터의 유효성을 검사해야 하는지 여부 및 수행할 유효성 검사 유형(DTD 또는 스키마)입니다. 기본값은 데이터 유효성 검사가 아닙니다. |
ValidationEventHandler 이벤트 | 유효성 검사 이벤트에 대한 정보를 수신하기 위한 이벤트 처리기입니다. 이벤트 처리기가 제공되지 XmlException 않으면 첫 번째 유효성 검사 오류가 발생합니다. |
ValidationFlags 속성 | 열거형 멤버를 XmlSchemaValidationFlags 통한 추가 유효성 검사 옵션: - AllowXmlAttributes -- 인스턴스 문서에서 XML 특성(xml:* )이 스키마에 정의되지 않은 경우에도 허용합니다. 특성은 해당 데이터 형식에 따라 유효성이 검사됩니다. 특정 시나리오에서 XmlSchemaValidationFlags 사용할 설정에 대한 참조 페이지를 참조하세요. (기본적으로 사용하지 않도록 설정됨)- ProcessIdentityConstraints --process identity constraints (xs:ID , , xs:key``xs:IDREF , , xs:unique``xs:keyref ) encountered during validation. (기본적으로 사용하도록 설정됩니다.)- ProcessSchemaLocation --process schemas specified by the xsi:schemaLocation or xsi:noNamespaceSchemaLocation attribute. (기본적으로 사용하도록 설정됩니다.)- ProcessInlineSchema -- 유효성 검사 중에 인라인 XML 스키마를 처리합니다. (기본적으로 사용하지 않도록 설정됨)- ReportValidationWarnings --유효성 검사 경고가 발생하는 경우 이벤트를 보고합니다. 일반적으로 특정 요소 또는 특성의 유효성을 검사할 DTD 또는 XML 스키마가 없는 경우 경고가 발생합니다. 알림 ValidationEventHandler 에 사용됩니다. (기본적으로 사용하지 않도록 설정됨) |
Schemas | 유효성 검사에 사용할 XmlSchemaSet입니다. |
XmlResolver 속성 | XmlResolver 외부 리소스를 확인하고 액세스하기 위한 것입니다. 여기에는 DTD 및 스키마와 같은 외부 엔터티와 XML 스키마에 포함된 모든 xs:include 요소 또는 xs:import 요소가 포함될 수 있습니다. 지정 XmlResolverXmlReader 하지 않으면 사용자 자격 증명 없이 기본값 XmlUrlResolver 을 사용합니다. |
데이터 규칙
메서드에서 Create 만든 XML 판독기는 기본적으로 다음과 같은 준수 요구 사항을 충족합니다.
W3C XML 1.0 권장 사항에 따라 새 줄과 특성 값이 정규화됩니다.
모든 엔터티가 자동으로 확장됩니다.
문서 형식 정의에 선언된 기본 특성은 판독기에서 유효성을 검사하지 않는 경우에도 항상 추가됩니다.
올바른 XML 네임스페이스 URI에 매핑된 XML 접두사 선언이 허용됩니다.
단일 특성 선언 및
NmTokens
단일NotationType
Enumeration
특성 선언의 표기법 이름은 고유합니다.
다음 XmlReaderSettings 속성을 사용하여 사용하도록 설정할 규칙 검사 유형을 지정합니다.
이 XmlReaderSettings 속성 사용 | 대상 | 기본값 |
---|---|---|
CheckCharacters 속성 | 다음에 대한 검사를 사용하거나 사용하지 않도록 설정합니다. - W3C XML 1.0 권장 사항의 2.2자 섹션에 정의된 대로 문자는 유효한 XML 문자 범위 내에 있습니다. - 모든 XML 이름은 W3C XML 1.0 권장 사항의 2.3 일반 구문 구문 섹션에 정의된 대로 유효합니다. 이 속성이 (기본값)XmlException로 설정 true 되면 XML 파일에 잘못된 문자 또는 잘못된 XML 이름이 포함되어 있으면 예외가 throw됩니다(예: 요소 이름은 숫자로 시작). |
문자 및 이름 검사를 사용할 수 있습니다. CheckCharacters를 false 로 설정하면 문자 엔터티 참조에 대해 문자 검사가 수행되지 않습니다. 판독기에서 텍스트 데이터를 처리하는 경우 이 설정에 관계없이 XML 이름이 유효한지 항상 확인합니다. 참고: XML 1.0 권장 사항에는 DTD가 있는 경우 문서 수준 준수가 필요합니다. 따라서 판독기를 지원 ConformanceLevel.Fragment하도록 구성되었지만 XML 데이터에 DTD(문서 형식 정의)가 포함되어 있으면 throw XmlException 됩니다. |
ConformanceLevel 속성 | 적용할 규칙 수준을 선택합니다. - Document. 올바른 형식의 XML 1.0 문서에 대한 규칙을 준수합니다. - Fragment. 외부 구문 분석된 엔터티로 사용할 수 있는 올바른 형식의 문서 조각에 대한 규칙을 준수합니다. - Auto. 판독기에서 결정한 수준을 준수합니다. 데이터가 적합하지 않으면 예외가 XmlException throw됩니다. |
Document |
노드 탐색
현재 노드는 XML 판독기를 현재 배치한 XML 노드입니다. 모든 XmlReader 메서드는 이 노드와 관련된 작업을 수행하며 모든 XmlReader 속성은 현재 노드의 값을 반영합니다.
다음 메서드를 사용하면 노드를 쉽게 탐색하고 데이터를 구문 분석할 수 있습니다.
이 XmlReaderSettings 메서드 사용 | 대상 |
---|---|
Read | 첫 번째 노드를 읽고 한 번에 하나의 노드 스트림을 진행합니다. 이러한 호출은 일반적으로 루프 내에서 while 수행됩니다.NodeType 속성을 사용하여 현재 노드의 형식(예: 특성, 주석, 요소 등)을 가져옵니다. |
Skip | 현재 노드의 자식을 건너뛰고 다음 노드로 이동합니다. |
MoveToContent 및 MoveToContentAsync | 비 콘텐츠 노드를 건너뛰고 다음 콘텐츠 노드 또는 파일의 끝으로 이동합니다. 비컨텐트 노드에는 ProcessingInstruction, DocumentType, CommentWhitespace및 SignificantWhitespace. 콘텐츠 노드에는 공백이 아닌 텍스트, CDATAEntityReference 및 .EndEntity |
ReadSubtree | 요소 및 모든 해당 자식을 읽고 새 XmlReader 인스턴스 집합을 반환합니다 ReadState.Initial. 이 메서드는 XML 요소 주위에 경계를 만드는 데 유용합니다. 예를 들어 처리를 위해 데이터를 다른 구성 요소에 전달하고 구성 요소에서 액세스할 수 있는 데이터의 양을 제한하려는 경우입니다. |
XmlReader.Read 한 번에 한 노드씩 텍스트 스트림을 탐색하고 각 노드의 형식을 표시하는 예제는 참조 페이지를 참조하세요.
다음 섹션에서는 요소, 특성 및 형식화된 데이터와 같은 특정 형식의 데이터를 읽는 방법을 설명합니다.
XML 요소 읽기
다음 표에서는 클래스가 요소 처리를 위해 제공하는 메서드 및 속성을 XmlReader 나열합니다. 요소에 XmlReader 배치된 후 노드 속성(예: Name)은 요소 값을 반영합니다. 아래에 설명된 멤버 외에도 클래스의 일반 메서드 및 속성을 XmlReader 사용하여 요소를 처리할 수도 있습니다. 예를 들어 메서드를 ReadInnerXml 사용하여 요소의 내용을 읽을 수 있습니다.
참고
시작 태그, 끝 태그 및 빈 요소 태그의 정의는 W3C XML 1.0 권장 사항의 섹션 3.1 을 참조하세요.
이 XmlReader 멤버 사용 | 대상 |
---|---|
IsStartElement 메서드 | 현재 노드가 시작 태그인지 빈 요소 태그인지 확인합니다. |
ReadStartElement 메서드 | 현재 노드가 요소인지 확인하고 판독기를 다음 노드(호출 IsStartElement 뒤에 Read오는)로 이동합니다. |
ReadEndElement 메서드 | 현재 노드가 끝 태그인지 확인하고 판독기를 다음 노드로 진행합니다. |
ReadElementString 메서드 | 텍스트 전용 요소를 읽습니다. |
ReadToDescendant 메서드 | XML 판독기를 지정된 이름의 다음 하위 요소(자식) 요소로 이동합니다. |
ReadToNextSibling 메서드 | XML 판독기를 지정된 이름의 다음 형제 요소로 진행합니다. |
IsEmptyElement 속성 | 현재 요소에 끝 요소 태그가 있는지 확인합니다. 예를 들면 다음과 같습니다. - <item num="123"/> (IsEmptyElement is true .)- <item num="123"> </item> (IsEmptyElement 는 false 요소의 콘텐츠가 비어 있지만)입니다. |
요소의 텍스트 내용을 읽는 예제는 메서드를 참조하세요 ReadString . 다음 예제에서는 루프를 사용하여 요소를 처리합니다 while
.
while (reader.Read()) {
if (reader.IsStartElement()) {
if (reader.IsEmptyElement)
{
Console.WriteLine("<{0}/>", reader.Name);
}
else {
Console.Write("<{0}> ", reader.Name);
reader.Read(); // Read the start tag.
if (reader.IsStartElement()) // Handle nested elements.
Console.Write("\r\n<{0}>", reader.Name);
Console.WriteLine(reader.ReadString()); //Read the text content of the element.
}
}
}
While reader.Read()
If reader.IsStartElement() Then
If reader.IsEmptyElement Then
Console.WriteLine("<{0}/>", reader.Name)
Else
Console.Write("<{0}> ", reader.Name)
reader.Read() ' Read the start tag.
If reader.IsStartElement() Then ' Handle nested elements.
Console.Write(vbCr + vbLf + "<{0}>", reader.Name)
End If
Console.WriteLine(reader.ReadString()) 'Read the text content of the element.
End If
End If
End While
XML 특성 읽기
XML 특성은 요소에서 가장 일반적으로 찾을 수 있지만 XML 선언 및 문서 형식 노드에서도 허용됩니다.
요소 노드에 배치하면 메서드를 MoveToAttribute 사용하여 요소의 특성 목록을 확인할 수 있습니다. 호출된 후에 MoveToAttribute 는 특성이 속한 요소의 속성이 아니라 해당 특성의 속성과 같은 NameNamespaceURIPrefix 노드 속성이 반영됩니다.
클래스는 XmlReader 이러한 메서드와 속성을 제공하여 요소의 특성을 읽고 처리합니다.
이 XmlReader 멤버 사용 | 대상 |
---|---|
HasAttributes 속성 | 현재 노드에 특성이 있는지 확인합니다. |
AttributeCount 속성 | 현재 요소의 특성 수를 가져옵니다. |
MoveToFirstAttribute 메서드 | 요소의 첫 번째 특성으로 이동합니다. |
MoveToNextAttribute 메서드 | 요소의 다음 특성으로 이동합니다. |
MoveToAttribute 메서드 | 지정된 특성으로 이동합니다. |
GetAttribute 메서드 또는 Item[] 속성 | 지정된 특성의 값을 가져옵니다. |
IsDefault 속성 | 현재 노드가 DTD 또는 스키마에 정의된 기본값에서 생성된 특성인지 확인합니다. |
MoveToElement 메서드 | 현재 특성을 소유하는 요소로 이동합니다. 특성을 탐색한 후 요소로 돌아가려면 이 메서드를 사용합니다. |
ReadAttributeValue 메서드 | 특성 값을 하나 이상의 Text``EntityReference 노드 또는 EndEntity 노드로 구문 분석합니다. |
일반 XmlReader 메서드 및 속성을 사용하여 특성을 처리할 수도 있습니다. 예를 들어 특성 Name 에 XmlReader 배치된 후 속성과 Value 속성은 특성의 값을 반영합니다. 콘텐츠 Read
메서드를 사용하여 특성 값을 가져올 수도 있습니다.
이 예제에서는 속성을 사용하여 AttributeCount 요소의 모든 특성을 탐색합니다.
// Display all attributes.
if (reader.HasAttributes) {
Console.WriteLine("Attributes of <" + reader.Name + ">");
for (int i = 0; i < reader.AttributeCount; i++) {
Console.WriteLine(" {0}", reader[i]);
}
// Move the reader back to the element node.
reader.MoveToElement();
}
' Display all attributes.
If reader.HasAttributes Then
Console.WriteLine("Attributes of <" + reader.Name + ">")
Dim i As Integer
For i = 0 To (reader.AttributeCount - 1)
Console.WriteLine(" {0}", reader(i))
Next i
' Move the reader back to the element node.
reader.MoveToElement()
End If
이 예제에서는 루프의 MoveToNextAttribute 메서드를 while
사용하여 특성을 탐색합니다.
if (reader.HasAttributes) {
Console.WriteLine("Attributes of <" + reader.Name + ">");
while (reader.MoveToNextAttribute()) {
Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
}
// Move the reader back to the element node.
reader.MoveToElement();
}
If reader.HasAttributes Then
Console.WriteLine("Attributes of <" + reader.Name + ">")
While reader.MoveToNextAttribute()
Console.WriteLine(" {0}={1}", reader.Name, reader.Value)
End While
' Move the reader back to the element node.
reader.MoveToElement()
End If
XML 선언 노드에서 특성 읽기
XML 판독기를 XML 선언 노드 Value 에 배치하면 이 속성은 버전, 독립 실행형 및 인코딩 정보를 단일 문자열로 반환합니다. XmlReader메서드, XmlTextReader 클래스 및 XmlValidatingReader 클래스에서 Create 만든 개체는 버전, 독립 실행형 및 인코딩 항목을 특성으로 노출합니다.
문서 형식 노드에서 특성 읽기
XML 판독기를 문서 형식 노드 GetAttribute 에 배치할 때 메서드와 속성을 사용하여 SYSTEM 및 Item[] PUBLIC 리터럴의 값을 반환할 수 있습니다. 예를 들어 호출 reader.GetAttribute("PUBLIC")
은 PUBLIC 값을 반환합니다.
처리 명령 노드에 대한 특성 읽기
XmlReader 처리 명령 노드에 위치하면 속성은 Value 전체 텍스트 콘텐츠를 반환합니다. 처리 명령 노드의 항목은 특성으로 처리되지 않습니다. 또는 MoveToAttribute 메서드를 사용하여 GetAttribute 읽을 수 없습니다.
XML 콘텐츠 읽기
XmlReader 클래스에는 XML 파일에서 콘텐츠를 읽고 콘텐츠를 문자열 값으로 반환하는 다음 멤버가 포함됩니다. CLR 형식을 반환하려면 다음 섹션을 참조하세요.
이 XmlReader 멤버 사용 | 대상 |
---|---|
Value 속성 | 현재 노드의 텍스트 콘텐츠를 가져옵니다. 반환되는 값은 노드 유형에 따라 달라집니다. Value 자세한 내용은 참조 페이지를 참조하세요. |
ReadString 메서드 | 요소 또는 텍스트 노드의 콘텐츠를 문자열로 가져옵니다. 이 메서드는 명령 및 주석 처리를 중지합니다. 이 메서드가 특정 노드 형식을 처리하는 방법에 대한 자세한 내용은 참조 페이지를 참조 ReadString 하세요. |
ReadInnerXml 및 ReadInnerXmlAsync 메서드 | 태그를 포함하여 현재 노드의 모든 콘텐츠를 가져올 수 있지만 시작 태그와 끝 태그는 제외됩니다. 예를 들면 다음과 같습니다.<node>this<child id="123"/></node> ReadInnerXml은 다음을 반환합니다. this<child id="123"/> |
ReadOuterXml 및 ReadOuterXmlAsync 메서드 | 태그 및 시작/끝 태그를 포함하여 현재 노드 및 해당 자식의 모든 콘텐츠를 가져옵니다. 예를 들면 다음과 같습니다.<node>this<child id="123"/></node> ReadOuterXml은 다음을 반환합니다. <node>this<child id="123"/></node> |
CLR 형식으로 변환
다음 표에 나열된 클래스의 XmlReader 멤버를 사용하여 XML 데이터를 읽고 값을 문자열 대신 CLR(공용 언어 런타임) 형식으로 반환할 수 있습니다. 이러한 멤버를 사용하면 문자열 값을 수동으로 구문 분석하거나 변환하지 않고도 코딩 작업에 가장 적합한 표현의 값을 가져올 수 있습니다.
ReadElementContentAs 메서드는 요소 노드 형식에서만 호출할 수 있습니다. 자식 요소 또는 혼합 콘텐츠를 포함하는 요소에서는 이러한 메서드를 사용할 수 없습니다. 호출되면 개체는 XmlReader 시작 태그를 읽고 요소 콘텐츠를 읽은 다음 끝 요소 태그를 지나 이동합니다. 처리 지침 및 주석은 무시되고 엔터티는 확장됩니다.
ReadContentAs 메서드는 현재 판독기 위치에서 텍스트 콘텐츠를 읽고 XML 데이터에 연결된 스키마 또는 데이터 형식 정보가 없는 경우 텍스트 콘텐츠를 요청된 반환 형식으로 변환합니다. 텍스트, 공백, 상당한 공백 및 CDATA 섹션이 연결됩니다. 주석 및 처리 지침은 건너뛰고 엔터티 참조는 자동으로 해결됩니다.
이 클래스는 XmlReader W3C XML 스키마 파트 2: Datatypes 권장 사항에 정의된 규칙을 사용합니다.
이 XmlReader 메서드 사용 | 이 CLR 형식을 반환하려면 |
---|---|
ReadContentAsBoolean 및 ReadElementContentAsBoolean | Boolean |
ReadContentAsDateTime 및 ReadElementContentAsDateTime | DateTime |
ReadContentAsDouble 및 ReadElementContentAsDouble | Double |
ReadContentAsLong 및 ReadElementContentAsLong | Int64 |
ReadContentAsInt 및 ReadElementContentAsInt | Int32 |
ReadContentAsString 및 ReadElementContentAsString | String |
ReadContentAs 및 ReadElementContentAs | 매개 변수를 사용하여 지정하는 returnType 형식 |
ReadContentAsObject 및 ReadElementContentAsObject | 속성에 지정된 가장 적합한 형식입니다 XmlReader.ValueType . 매핑 정보는 System.Xml 클래스의 형식 지원을 참조하세요. |
형식 때문에 요소를 CLR 형식으로 쉽게 변환할 수 없는 경우 스키마 매핑을 사용하여 성공적인 변환을 보장할 수 있습니다. 다음 예제에서는 .xsd 파일을 사용하여 요소를 형식으로 xs:date
변환 hire-date
한 다음, 메서드를 ReadElementContentAsDateTime 사용하여 요소를 개체로 DateTime 반환합니다.
입력(hireDate.xml):
<employee xmlns="urn:empl-hire">
<ID>12365</ID>
<hire-date>2003-01-08</hire-date>
<title>Accountant</title>
</employee>
스키마(hireDate.xsd):
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:unsignedShort" />
<xs:element name="hire-date" type="xs:date" />
<xs:element name="title" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
코드:
// Create a validating XmlReader object. The schema
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {
// Move to the hire-date element.
reader.MoveToContent();
reader.ReadToDescendant("hire-date");
// Return the hire-date as a DateTime object.
DateTime hireDate = reader.ReadElementContentAsDateTime();
Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}
' Create a validating XmlReader object. The schema
' provides the necessary type information.
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd")
Using reader As XmlReader = XmlReader.Create("hireDate.xml", settings)
' Move to the hire-date element.
reader.MoveToContent()
reader.ReadToDescendant("hire-date")
' Return the hire-date as a DateTime object.
Dim hireDate As DateTime = reader.ReadElementContentAsDateTime()
Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6))
End Using
출력:
Six Month Review Date: 7/8/2003 12:00:00 AM
비동기 프로그래밍
XmlReader 대부분의 메서드에는 메서드 이름의 끝에 "Async"가 있는 비동기 메서드가 있습니다. 예를 들어 해당하는 비동 ReadContentAsObject 기 값은 .입니다 ReadContentAsObjectAsync.
다음 메서드는 비동기 메서드 호출과 함께 사용할 수 있습니다.
다음 섹션에서는 비동기 대응 항목이 없는 메서드의 비동기 사용에 대해 설명합니다.
ReadStartElement 메서드
public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
if (await reader.MoveToContentAsync() != XmlNodeType.Element)
{
throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
}
if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
{
await reader.ReadAsync();
}
else
{
throw new InvalidOperationException("localName or namespace doesn’t match");
}
}
<Extension()>
Public Async Function ReadStartElementAsync(reader As XmlReader, localname As String, ns As String) As Task
If (Await reader.MoveToContentAsync() <> XmlNodeType.Element) Then
Throw New InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType")
End If
If ((reader.LocalName = localname) And (reader.NamespaceURI = ns)) Then
Await reader.ReadAsync()
Else
Throw New InvalidOperationException("localName or namespace doesn’t match")
End If
End Function
ReadEndElement 메서드
public static async Task ReadEndElementAsync(this XmlReader reader)
{
if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
{
throw new InvalidOperationException();
}
await reader.ReadAsync();
}
<Extension()>
Public Async Function ReadEndElementAsync(reader As XmlReader) As task
If (Await reader.MoveToContentAsync() <> XmlNodeType.EndElement) Then
Throw New InvalidOperationException()
End If
Await reader.ReadAsync()
End Function
ReadToNextSibling 메서드
public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
if (localName == null || localName.Length == 0)
{
throw new ArgumentException("localName is empty or null");
}
if (namespaceURI == null)
{
throw new ArgumentNullException("namespaceURI");
}
// atomize local name and namespace
localName = reader.NameTable.Add(localName);
namespaceURI = reader.NameTable.Add(namespaceURI);
// find the next sibling
XmlNodeType nt;
do
{
await reader.SkipAsync();
if (reader.ReadState != ReadState.Interactive)
break;
nt = reader.NodeType;
if (nt == XmlNodeType.Element &&
((object)localName == (object)reader.LocalName) &&
((object)namespaceURI ==(object)reader.NamespaceURI))
{
return true;
}
} while (nt != XmlNodeType.EndElement && !reader.EOF);
return false;
}
<Extension()>
Public Async Function ReadToNextSiblingAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
If (localName = Nothing Or localName.Length = 0) Then
Throw New ArgumentException("localName is empty or null")
End If
If (namespaceURI = Nothing) Then
Throw New ArgumentNullException("namespaceURI")
End If
' atomize local name and namespace
localName = reader.NameTable.Add(localName)
namespaceURI = reader.NameTable.Add(namespaceURI)
' find the next sibling
Dim nt As XmlNodeType
Do
Await reader.SkipAsync()
If (reader.ReadState <> ReadState.Interactive) Then
Exit Do
End If
nt = reader.NodeType
If ((nt = XmlNodeType.Element) And
((CObj(localName) = CObj(reader.LocalName))) And
(CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
Return True
End If
Loop While (nt <> XmlNodeType.EndElement And (Not reader.EOF))
Return False
End Function
ReadToFollowing 메서드
public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
if (localName == null || localName.Length == 0)
{
throw new ArgumentException("localName is empty or null");
}
if (namespaceURI == null)
{
throw new ArgumentNullException("namespaceURI");
}
// atomize local name and namespace
localName = reader.NameTable.Add(localName);
namespaceURI = reader.NameTable.Add(namespaceURI);
// find element with that name
while (await reader.ReadAsync())
{
if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
{
return true;
}
}
return false;
}
<Extension()>
Public Async Function ReadToFollowingAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
If (localName = Nothing Or localName.Length = 0) Then
Throw New ArgumentException("localName is empty or null")
End If
If (namespaceURI = Nothing) Then
Throw New ArgumentNullException("namespaceURI")
End If
' atomize local name and namespace
localName = reader.NameTable.Add(localName)
namespaceURI = reader.NameTable.Add(namespaceURI)
' find element with that name
While (Await reader.ReadAsync())
If ((reader.NodeType = XmlNodeType.Element) And
(CObj(localName) = CObj(reader.LocalName)) And
(CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
Return True
End If
End While
Return False
End Function
ReadToDescendant 메서드
public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
if (localName == null || localName.Length == 0)
{
throw new ArgumentException("localName is empty or null");
}
if (namespaceURI == null)
{
throw new ArgumentNullException("namespaceURI");
}
// save the element or root depth
int parentDepth = reader.Depth;
if (reader.NodeType != XmlNodeType.Element)
{
// adjust the depth if we are on root node
if (reader.ReadState == ReadState.Initial)
{
parentDepth--;
}
else
{
return false;
}
}
else if (reader.IsEmptyElement)
{
return false;
}
// atomize local name and namespace
localName = reader.NameTable.Add(localName);
namespaceURI = reader.NameTable.Add(namespaceURI);
// find the descendant
while (await reader.ReadAsync() && reader.Depth > parentDepth)
{
if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
{
return true;
}
}
return false;
}
<Extension()>
Public Async Function ReadToDescendantAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
If (localName = Nothing Or localName.Length = 0) Then
Throw New ArgumentException("localName is empty or null")
End If
If (namespaceURI = Nothing) Then
Throw New ArgumentNullException("namespaceURI")
End If
' save the element or root depth
Dim parentDepth As Integer = reader.Depth
If (reader.NodeType <> XmlNodeType.Element) Then
' adjust the depth if we are on root node
If (reader.ReadState = ReadState.Initial) Then
parentDepth -= 1
Else
Return False
End If
ElseIf (reader.IsEmptyElement) Then
Return False
End If
' atomize local name and namespace
localName = reader.NameTable.Add(localName)
namespaceURI = reader.NameTable.Add(namespaceURI)
' find the descendant
While (Await reader.ReadAsync() And reader.Depth > parentDepth)
If (reader.NodeType = XmlNodeType.Element And
(CObj(localName) = CObj(reader.LocalName)) And
(CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
Return True
End If
End While
Return False
End Function
보안 고려 사항
클래스로 작업할 때 다음 사항을 고려합니다 XmlReader .
예외는 앱에 XmlReader 버블링하지 않을 수 있는 경로 정보를 공개할 수 있습니다. 앱은 예외를 catch하고 적절하게 처리해야 합니다.
서비스 거부 문제가 우려되거나 신뢰할 수 없는 원본을 처리하는 경우 DTD 처리를 사용하도록 설정하지 마세요. DTD 처리는 메서드에서 만든 개체에 대해 XmlReader 기본적으로 사용하지 않도록 설정됩니다 Create .
DTD 처리를 활성화하는 경우 XmlSecureResolver를 사용하여 XmlReader가 액세스할 수 있는 리소스를 제한할 수 있습니다. 또한 XML 처리에 필요한 메모리 및 시간을 제한할 수 있도록 앱을 디자인할 수 있습니다. 예를 들어 ASP.NET 앱에서 제한 시간을 구성할 수 있습니다.
XML 데이터에는 스키마 파일과 같은 외부 리소스에 대한 참조가 포함될 수 있습니다. 기본적으로 외부 리소스는 사용자 자격 증명이 없는 개체를 XmlUrlResolver 사용하여 확인됩니다. 이러한 경우 다음 중 하나를 수행하여 보안을 강화할 수 있습니다.
XmlReader 속성을 XmlReaderSettings.XmlResolver 개체로 설정하여 XmlSecureResolver에서 액세스 가능한 리소스를 제한합니다.
XmlReader 속성을 XmlReaderSettings.XmlResolver로 설정하여
null
가 모든 외부 리소스를 열 수 없도록 하십시오.
ProcessInlineSchema 개체의 XmlReaderSettings 유효성 검사 플래그 및 ProcessSchemaLocation 유효성 검사는 기본적으로 설정되지 않습니다. 이렇게 하면 신뢰할 수 없는 원본에서 XML 데이터를 처리할 때 스키마 기반 공격으로부터 보호할 XmlReader 수 있습니다. 이 플래그를 설정하면 XmlResolver 개체의 XmlReaderSettings를 사용하여 XmlReader에서 인스턴스 문서에 나타난 스키마 위치를 확인할 수 있습니다. 속성이 XmlResolver 설정
null
되면 스키마 위치 및 ProcessSchemaLocation 유효성 검사 플래그가 ProcessInlineSchema 설정된 경우에도 확인되지 않습니다.문서의 유효성을 검사하는 동안 스키마를 추가하면 새 형식이 추가되고 해당 문서에 대한 유효성 검사 결과가 달라질 수 있습니다. 결과적으로 외부 스키마는 신뢰할 수 있는 소스에서만 확인해야 합니다.
문서의 많은 부분에 대해 ID 제약 조건이 있는 스키마에 대해 고가용성 시나리오에서 신뢰할 수 없는 대형 XML 문서의 유효성을 검사할 때 플래그를 사용하지 않도록 설정하는 ProcessIdentityConstraints 것이 좋습니다. 이 플래그는 기본적으로 사용하도록 설정됩니다.
XML 데이터에는 처리하는 데 시간이 많이 걸리는 수많은 특성, 네임스페이스 선언, 중첩된 요소 등이 포함될 수 있습니다. 전송되는 입력의 크기를 제한하려면 다음을 XmlReader수행할 수 있습니다.
속성을 설정하여 문서 크기를 제한합니다 MaxCharactersInDocument .
속성을 설정 MaxCharactersFromEntities 하여 엔터티를 확장하여 발생하는 문자 수를 제한합니다.
에 대한 사용자 지정
IStream
구현을 만듭니다 XmlReader.
이 메서드는 ReadValueChunk 대량의 데이터 스트림을 처리하는 데 사용할 수 있습니다. 이 메서드는 전체 값에 대한 단일 문자열을 할당하는 대신 한 번에 적은 수의 문자를 읽습니다.
고유한 로컬 이름, 네임스페이스 또는 접두사 수가 많은 XML 문서를 읽을 때 문제가 발생할 수 있습니다. 파생 XmlReader되는 클래스를 사용하고 각 항목에 LocalName대해 , Prefix또는 NamespaceURI 속성을 호출하는 경우 반환된 문자열이 에 NameTable추가됩니다. 이 컬렉션은 NameTable 크기가 감소하지 않으면서 문자열 핸들의 가상 메모리 누수가 발생합니다. 이에 대한 한 가지 완화 방법은 클래스에서 NameTable 파생되고 최대 크기 할당량을 적용하는 것입니다. (을 사용하거나 가득 찼을 NameTable때 전환할 수 있는 NameTable 방법은 없습니다). 또 다른 완화 방법은 언급된 속성을 사용하지 않고 가능한 경우 메서드와 함께 IsStartElement 메서드를 사용하는 MoveToAttribute 것입니다. 이러한 메서드는 문자열을 반환하지 않으므로 컬렉션이 과도하게 채워 NameTable 지는 문제를 방지합니다.
XmlReaderSettings 개체에는 사용자 자격 증명과 같은 중요한 정보가 포함될 수 있습니다. 신뢰할 수 없는 구성 요소는 개체 및 해당 사용자 자격 증명을 사용하여 XmlReaderSettings 데이터를 읽을 개체를 만들 XmlReader 수 있습니다. 개체를 캐싱 XmlReaderSettings 하거나 한 구성 요소에서 다른 구성 요소로 개체를 XmlReaderSettings 전달할 때는 주의해야 합니다.
신뢰할 수 없는 소스로부터 NameTable, XmlNamespaceManager 및 XmlResolver 개체 등의 지원 구성 요소를 받지 마십시오.
생성자
XmlReader() |
|
속성
AttributeCount |
파생 클래스에서 재정의되면 현재 노드에 포함된 특성 수를 가져옵니다. |
BaseURI |
파생 클래스에서 재정의되면 현재 노드의 기본 URI를 가져옵니다. |
CanReadBinaryContent |
XmlReader가 이진 콘텐츠 읽기 메서드를 구현하는지를 나타내는 값을 가져옵니다. |
CanReadValueChunk |
XmlReader가 ReadValueChunk(Char[], Int32, Int32) 메서드를 구현하는지를 나타내는 값을 가져옵니다. |
CanResolveEntity |
이 판독기가 엔터티를 구문 분석하고 확인할 수 있는지를 나타내는 값을 가져옵니다. |
Depth |
파생 클래스에서 재정의되면 XML 문서에서 현재 노드의 수준을 가져옵니다. |
EOF |
파생 클래스에서 재정의되면 판독기가 스트림의 끝에 배치되었는지 여부를 나타내는 값을 가져옵니다. |
HasAttributes |
현재 노드에 특성이 있는지를 나타내는 값을 얻습니다. |
HasValue |
파생 클래스에서 재정의되면 현재 노드에 Value가 있는지 여부를 나타내는 값을 가져옵니다. |
IsDefault |
파생 클래스에서 재정의되면 현재 노드가 DTD나 스키마에서 정의한 기본값에서 생성된 값을 가진 특성인지 여부를 나타내는 값을 가져옵니다. |
IsEmptyElement |
파생 클래스에서 재정의되면 현재 노드가 |
Item[Int32] |
파생 클래스에서 재정의되면 지정된 인덱스가 있는 특성의 값을 가져옵니다. |
Item[String, String] |
파생 클래스에서 재정의되면 지정된 LocalName 및 NamespaceURI가 있는 특성의 값을 가져옵니다. |
Item[String] |
파생 클래스에서 재정의되면 지정된 Name이 있는 특성의 값을 가져옵니다. |
LocalName |
파생 클래스에서 재정의되면 현재 노드의 로컬 이름을 가져옵니다. |
Name |
파생 클래스에서 재정의되면 현재 노드의 정규화된 이름을 가져옵니다. |
NamespaceURI |
파생 클래스에서 재정의되면 판독기가 배치된 노드의 네임스페이스 URI를 W3C Namespace 사양에 정의된 대로 가져옵니다. |
NameTable |
파생 클래스에서 재정의되면 이 구현과 관련된 XmlNameTable을 가져옵니다. |
NodeType |
파생 클래스에서 재정의되면 현재 노드의 형식을 가져옵니다. |
Prefix |
파생 클래스에서 재정의되면 현재 노드와 관련된 네임스페이스 접두사를 가져옵니다. |
QuoteChar |
파생 클래스에서 재정의되면 Attribute 노드의 값을 묶는 데 사용되는 따옴표 문자를 가져옵니다. |
ReadState |
파생 클래스에서 재정의되면 판독기의 상태를 가져옵니다. |
SchemaInfo |
스키마 유효성 검사의 결과로 현재 노드에 할당된 스키마 정보를 가져옵니다. |
Settings |
이 XmlReader 인스턴스를 만드는 데 사용되는 XmlReaderSettings 개체를 가져옵니다. |
Value |
파생 클래스에서 재정의되면 현재 노드의 텍스트 값을 가져옵니다. |
ValueType |
현재 노드의 CLR(공용 언어 런타임) 형식을 가져옵니다. |
XmlLang |
파생 클래스에서 재정의되면 현재 |
XmlSpace |
파생 클래스에서 재정의되면 현재 |
메서드
Close() | |
Create(Stream) |
기본 설정의 지정된 스트림을 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(Stream, XmlReaderSettings) |
지정된 스트림 및 설정을 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(Stream, XmlReaderSettings, String) |
지정된 스트림, 기본 URI 및 설정을 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(Stream, XmlReaderSettings, XmlParserContext) |
구문 분석을 위해 지정한 스트림, 설정 및 컨텍스트 정보를 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(String) |
지정된 URI를 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(String, XmlReaderSettings) |
지정된 URI 및 설정을 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(String, XmlReaderSettings, XmlParserContext) |
지정된 URI, 설정 및 컨텍스트 정보를 구문 분석에 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(TextReader) |
지정된 텍스트 판독기를 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(TextReader, XmlReaderSettings) |
지정된 텍스트 판독기 및 설정을 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(TextReader, XmlReaderSettings, String) |
지정된 텍스트 판독기, 설정 및 기본 URI를 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(TextReader, XmlReaderSettings, XmlParserContext) |
지정된 텍스트 판독기, 설정 및 컨텍스트 정보를 구문 분석에 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Create(XmlReader, XmlReaderSettings) |
지정된 XML 판독기 및 설정을 사용하여 새 XmlReader 인스턴스를 만듭니다. |
Dispose() |
XmlReader 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다. |
Dispose(Boolean) |
XmlReader에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetAttribute(Int32) |
파생 클래스에서 재정의되면 지정된 인덱스가 있는 특성의 값을 가져옵니다. |
GetAttribute(String) |
파생 클래스에서 재정의되면 지정된 Name이 있는 특성의 값을 가져옵니다. |
GetAttribute(String, String) |
파생 클래스에서 재정의되면 지정된 LocalName 및 NamespaceURI가 있는 특성의 값을 가져옵니다. |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
GetValueAsync() |
현재 노드의 값을 비동기적으로 가져옵니다. |
IsName(String) |
문자열 인수가 유효한 XML 이름인지 여부를 나타내는 값을 반환합니다. |
IsNameToken(String) |
문자열 인수가 유효한 XML 이름 토큰인지 여부를 나타내는 값을 반환합니다. |
IsStartElement() |
MoveToContent()를 호출하고 현재 콘텐츠 노드가 시작 태그 또는 빈 요소 태그인지 테스트합니다. |
IsStartElement(String) |
MoveToContent()를 호출하고 현재 콘텐츠 노드가 시작 태그 또는 빈 요소 태그인지 여부와 찾은 요소의 Name 속성이 지정된 인수와 일치하는지 여부를 테스트합니다. |
IsStartElement(String, String) |
MoveToContent()를 호출하고 현재 콘텐츠 노드가 시작 태그 또는 빈 요소 태그인지 여부와 찾은 요소의 LocalName 및 NamespaceURI 속성이 지정된 인수와 일치하는지 여부를 테스트합니다. |
LookupNamespace(String) |
파생 클래스에서 재정의되면 현재 요소의 범위에서 네임스페이스 접두사를 확인합니다. |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
MoveToAttribute(Int32) |
파생 클래스에서 재정의되면 지정된 인덱스가 있는 특성으로 이동합니다. |
MoveToAttribute(String) |
파생 클래스에서 재정의되면 지정된 Name이 있는 특성으로 이동합니다. |
MoveToAttribute(String, String) |
파생 클래스에서 재정의되면 지정된 LocalName 및 NamespaceURI가 있는 특성으로 이동합니다. |
MoveToContent() |
현재 노드가 콘텐츠 노드(공백 없는 텍스트, |
MoveToContentAsync() |
현재 노드가 콘텐츠 노드인지를 비동기적으로 확인합니다. 해당 노드가 콘텐츠 노드가 아니면 판독기는 다음 콘텐츠 노드나 파일의 끝으로 건너뜁니다. |
MoveToElement() |
파생 클래스에서 재정의되면 현재 Attribute 노드를 포함하는 요소로 이동합니다. |
MoveToFirstAttribute() |
파생 클래스에서 재정의되면 첫 번째 특성으로 이동합니다. |
MoveToNextAttribute() |
파생 클래스에서 재정의되면 다음 특성으로 이동합니다. |
Read() |
파생 클래스에서 재정의되면 스트림에서 다음 노드를 읽습니다. |
ReadAsync() |
스트림에서 다음 노드를 비동기적으로 읽습니다. |
ReadAttributeValue() |
파생 클래스에서 재정의되면 하나 이상의 |
ReadContentAs(Type, IXmlNamespaceResolver) |
지정한 형식의 개체로 콘텐츠를 읽습니다. |
ReadContentAsAsync(Type, IXmlNamespaceResolver) |
지정한 형식의 개체로 콘텐츠를 비동기적으로 읽습니다. |
ReadContentAsBase64(Byte[], Int32, Int32) |
콘텐츠를 읽고 Base64 디코딩된 이진 바이트를 반환합니다. |
ReadContentAsBase64Async(Byte[], Int32, Int32) |
콘텐츠를 비동기적으로 읽고 Base64 디코딩된 이진 바이트를 반환합니다. |
ReadContentAsBinHex(Byte[], Int32, Int32) |
콘텐츠를 읽고 |
ReadContentAsBinHexAsync(Byte[], Int32, Int32) |
콘텐츠를 비동기적으로 읽고 |
ReadContentAsBoolean() |
현재 위치의 텍스트 콘텐츠를 |
ReadContentAsDateTime() |
현재 위치의 텍스트 콘텐츠를 DateTime 개체로 읽습니다. |
ReadContentAsDateTimeOffset() |
현재 위치의 텍스트 콘텐츠를 DateTimeOffset 개체로 읽습니다. |
ReadContentAsDecimal() |
현재 위치의 텍스트 콘텐츠를 Decimal 개체로 읽습니다. |
ReadContentAsDouble() |
현재 위치의 텍스트 콘텐츠를 배정밀도 부동 소수점 숫자로 읽습니다. |
ReadContentAsFloat() |
현재 위치의 텍스트 콘텐츠를 단정밀도 부동 소수점 숫자로 읽습니다. |
ReadContentAsInt() |
현재 위치의 텍스트 콘텐츠를 부호 있는 32비트 정수로 읽습니다. |
ReadContentAsLong() |
현재 위치의 텍스트 콘텐츠를 부호 있는 64비트 정수로 읽습니다. |
ReadContentAsObject() |
현재 위치의 텍스트 콘텐츠를 Object로 읽습니다. |
ReadContentAsObjectAsync() |
현재 위치의 텍스트 콘텐츠를 Object로 비동기적으로 읽습니다. |
ReadContentAsString() |
현재 위치의 텍스트 콘텐츠를 String 개체로 읽습니다. |
ReadContentAsStringAsync() |
현재 위치의 텍스트 콘텐츠를 String 개체로 읽습니다. |
ReadElementContentAs(Type, IXmlNamespaceResolver) |
요소 콘텐츠를 요청된 형식으로 읽습니다. |
ReadElementContentAs(Type, IXmlNamespaceResolver, String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 요소 콘텐츠를 요청된 형식으로 읽습니다. |
ReadElementContentAsAsync(Type, IXmlNamespaceResolver) |
요소 콘텐츠를 요청된 형식으로 비동기적으로 읽습니다. |
ReadElementContentAsBase64(Byte[], Int32, Int32) |
요소를 읽고 |
ReadElementContentAsBase64Async(Byte[], Int32, Int32) |
요소를 비동기적으로 읽고 |
ReadElementContentAsBinHex(Byte[], Int32, Int32) |
요소를 읽고 |
ReadElementContentAsBinHexAsync(Byte[], Int32, Int32) |
요소를 비동기적으로 읽고 |
ReadElementContentAsBoolean() |
현재 요소를 읽고 콘텐츠를 Boolean 개체로 반환합니다. |
ReadElementContentAsBoolean(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 Boolean 개체로 반환합니다. |
ReadElementContentAsDateTime() |
현재 요소를 읽고 콘텐츠를 DateTime 개체로 반환합니다. |
ReadElementContentAsDateTime(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 DateTime 개체로 반환합니다. |
ReadElementContentAsDecimal() |
현재 요소를 읽고 콘텐츠를 Decimal 개체로 반환합니다. |
ReadElementContentAsDecimal(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 Decimal 개체로 반환합니다. |
ReadElementContentAsDouble() |
현재 요소를 읽고 콘텐츠를 배정밀도 부동 소수점 숫자로 반환합니다. |
ReadElementContentAsDouble(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 배정밀도 부동 소수점 숫자로 반환합니다. |
ReadElementContentAsFloat() |
현재 요소를 읽고 콘텐츠를 단정밀도 부동 소수점 숫자로 반환합니다. |
ReadElementContentAsFloat(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 단정밀도 부동 소수점 숫자로 반환합니다. |
ReadElementContentAsInt() |
현재 요소를 읽고 부호 있는 32비트 정수로 콘텐츠를 반환합니다. |
ReadElementContentAsInt(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 부호 있는 32비트 정수로 반환합니다. |
ReadElementContentAsLong() |
현재 요소를 읽고 부호 있는 64비트 정수로 콘텐츠를 반환합니다. |
ReadElementContentAsLong(String, String) |
지정된 로컬 이름 및 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음, 현재 요소를 읽고 콘텐츠를 부호 있는 64비트 정수로 반환합니다. |
ReadElementContentAsObject() |
현재 요소를 읽고 콘텐츠를 Object로 반환합니다. |
ReadElementContentAsObject(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 Object로 반환합니다. |
ReadElementContentAsObjectAsync() |
현재 요소를 비동기적으로 읽고 콘텐츠를 Object로 반환합니다. |
ReadElementContentAsString() |
현재 요소를 읽고 콘텐츠를 String 개체로 반환합니다. |
ReadElementContentAsString(String, String) |
지정된 로컬 이름과 네임스페이스 URI가 현재 요소의 로컬 이름 및 네임스페이스 URI와 일치하는지 확인한 다음 현재 요소를 읽고 콘텐츠를 String 개체로 반환합니다. |
ReadElementContentAsStringAsync() |
현재 요소를 비동기적으로 읽고 콘텐츠를 String 개체로 반환합니다. |
ReadElementString() |
텍스트 전용 요소를 읽습니다. 그러나 이 연산을 더 간단하게 처리하는 방법을 제공하는 ReadElementContentAsString() 메서드를 대신 사용하는 것이 좋습니다. |
ReadElementString(String) |
텍스트 전용 요소를 읽기 전에 찾은 요소의 Name 속성이 지정된 문자열과 일치하는지 확인합니다. 그러나 이 연산을 더 간단하게 처리하는 방법을 제공하는 ReadElementContentAsString() 메서드를 대신 사용하는 것이 좋습니다. |
ReadElementString(String, String) |
텍스트 전용 요소를 읽기 전에 찾은 요소의 LocalName 및 NamespaceURI 속성이 지정된 문자열과 일치하는지 확인합니다. 그러나 이 연산을 더 간단하게 처리하는 방법을 제공하는 ReadElementContentAsString(String, String) 메서드를 대신 사용하는 것이 좋습니다. |
ReadEndElement() |
현재 콘텐츠 노드가 끝 태그인지 확인하고 판독기를 다음 노드로 이동합니다. |
ReadInnerXml() |
파생 클래스에서 재정의되면 태그를 포함한 모든 콘텐츠를 문자열로 읽습니다. |
ReadInnerXmlAsync() |
태그를 포함한 모든 콘텐츠를 문자열로 비동기적으로 읽습니다. |
ReadOuterXml() |
파생 클래스에서 재정의되면 태그를 포함하여 이 노드 및 모든 자식 노드를 나타내는 콘텐츠를 읽습니다. |
ReadOuterXmlAsync() |
이 노드 및 이 노드의 모든 자식을 나타내는 태그를 포함한 콘텐츠를 비동기적으로 읽습니다. |
ReadStartElement() |
현재 노드가 요소인지 확인하고 판독기를 다음 노드로 이동합니다. |
ReadStartElement(String) |
현재 콘텐츠 노드가 지정된 Name을 가진 요소인지 확인하고 판독기를 다음 노드로 이동합니다. |
ReadStartElement(String, String) |
현재 콘텐츠 노드가 지정된 LocalName 및 NamespaceURI가 있는 요소인지 확인하고 판독기를 다음 노드로 이동합니다. |
ReadString() |
파생 클래스에서 재정의되면 요소 또는 text 노드의 내용을 문자열로 읽습니다. 그러나 이 연산을 더 간단하게 처리하는 방법을 제공하는 ReadElementContentAsString 메서드를 대신 사용하는 것이 좋습니다. |
ReadSubtree() |
현재 노드와 해당 하위 노드 전체를 읽는 데 사용되는 새 |
ReadToDescendant(String) |
지정된 정규화 이름을 사용하는 다음 하위 요소로 XmlReader를 이동합니다. |
ReadToDescendant(String, String) |
지정된 로컬 이름과 네임스페이스 URI를 사용하는 다음 하위 요소로 XmlReader를 이동합니다. |
ReadToFollowing(String) |
지정된 정규화된 이름의 요소를 찾을 때까지 읽습니다. |
ReadToFollowing(String, String) |
지정된 로컬 이름 및 네임스페이스 URI를 사용하는 요소를 찾을 때까지 읽습니다. |
ReadToNextSibling(String) |
지정된 정규화 이름을 사용하는 다음 형제 요소로 |
ReadToNextSibling(String, String) |
지정된 로컬 이름과 네임스페이스 URI를 사용하는 다음 형제 요소로 |
ReadValueChunk(Char[], Int32, Int32) |
XML 문서에 포함된 큰 텍스트 스트림을 읽습니다. |
ReadValueChunkAsync(Char[], Int32, Int32) |
XML 문서에 포함된 큰 텍스트 스트림을 비동기적으로 읽습니다. |
ResolveEntity() |
파생 클래스에서 재정의되면 |
Skip() |
현재 노드의 자식을 건너뜁니다. |
SkipAsync() |
현재 노드의 자식을 비동기적으로 건너뜁니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
명시적 인터페이스 구현
IDisposable.Dispose() |
이 멤버에 대한 설명은 Dispose()를 참조하세요. |