System.Xml.XmlWriter 클래스

클래스는 XmlWriter 스트림, 파일, 텍스트 판독기 또는 문자열에 XML 데이터를 씁니다. W3C XML(Extensible Markup Language) 1.0(네 번째 버전)XML 1.0(세 번째 버전) 권장 사항의 네임스페이 스를 지원합니다.

클래스의 멤버를 사용하여 다음을 XmlWriter 수행할 수 있습니다.

  • 문자가 유효한 XML 문자이고 해당 요소 및 특성 이름이 유효한 XML 이름인지 확인합니다.
  • XML 문서가 올바른 형식인지 확인합니다.
  • 이진 바이트를 Base64 또는 BinHex로 인코딩하고 결과 텍스트를 작성합니다.
  • 값 변환을 수동으로 수행할 필요가 없도록 문자열 대신 공용 언어 런타임 형식을 사용하여 값을 전달합니다.
  • 하나의 출력 스트림에 여러 문서를 씁니다.
  • 유효한 이름, 정규화된 이름 및 이름 토큰을 작성합니다.

XML 작성기 만들기

인스턴스를 XmlWriter 만들려면 메서드를 XmlWriter.Create 사용합니다. XML 기록기에서 사용하도록 설정할 기능 집합을 지정하려면 메서드에 XmlWriterSettingsCreate 전달합니다. 그렇지 않으면 기본 설정이 사용됩니다. Create 자세한 내용은 참조 페이지를 참조하세요.

출력 형식 지정

이 클래스에는 XmlWriterSettings 출력의 형식을 제어 XmlWriter 하는 몇 가지 속성이 포함되어 있습니다.

속성 설명
Encoding 사용할 텍스트 인코딩을 지정합니다. 기본값은 Encoding.UTF8입니다.
Indent 요소를 들여쓰는지 여부를 나타냅니다. 기본값은 들여쓰기 없음입니다 false .
IndentChars 인덴팅할 때 사용할 문자열을 지정합니다. 기본값은 두 개의 공백입니다.
NewLineChars 줄 바꿈에 사용할 문자열을 지정합니다. 기본값은 \r\n Unix가 아닌 플랫폼의 경우(캐리지 리턴, 줄 바꿈) 및 \n Unix 플랫폼의 경우 줄 바꿈입니다.
NewLineHandling 줄무늬 문자를 처리하는 방법을 지정합니다.
NewLineOnAttributes 새 줄에 특성을 쓸지 여부를 나타냅니다. Indent 이 속성을 사용할 때 설정 true 해야 합니다. 기본값은 false입니다.
OmitXmlDeclaration XML 선언을 작성할지 여부를 나타냅니다. 기본값은 false입니다.

IndentChars 속성은 Indent 중요하지 않은 공백의 서식을 제어합니다. 예를 들어 요소 노드를 들여쓰기:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
XmlWriter writer = XmlWriter.Create("books.xml", settings);
Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.IndentChars = vbTab
Dim writer As XmlWriter = XmlWriter.Create("books.xml", settings)

NewLineOnAttributes 들여쓰기 수준을 한 개 더 사용하여 새 줄에 각 특성을 작성합니다.

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = true;
XmlWriter writer = XmlWriter.Create("books.xml", settings);
Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.NewLineOnAttributes = True
Dim writer As XmlWriter = XmlWriter.Create("books.xml", settings)

데이터 규칙

XML 작성기는 데이터 준수를 XmlWriterSettings 위해 클래스에서 검사 두 가지 속성을 사용합니다.

  • 이 속성은 CheckCharacters W3C에서 정의한 대로 문자가 법적 범위를 벗어나는 경우 문자를 검사 예외를 throw XmlException 하도록 XML 기록기에 지시합니다.

  • 이 속성은 ConformanceLevel 작성 중인 스트림이 W3C에서 정의한 대로 올바른 형식의 XML 1.0 문서 또는 문서 조각에 대한 규칙을 준수하는지 검사 XML 기록기를 구성합니다. 다음 표에서는 세 가지 규칙 수준에 대해 설명합니다. 기본값은 Document입니다. 자세한 내용은 속성 및 열거형을 System.Xml.ConformanceLevel 참조 XmlWriterSettings.ConformanceLevel 하세요.

    Level 설명
    Document XML 출력은 올바른 형식의 XML 1.0 문서에 대한 규칙을 준수하며 모든 준수 프로세서에서 처리할 수 있습니다.
    Fragment XML 출력은 올바른 형식의 XML 1.0 문서 조각에 대한 규칙을 준수합니다.
    Auto XML 작성기는 들어오는 데이터에 따라 적용할 규칙 검사 수준(문서 또는 조각)을 결정합니다.

요소 쓰기

다음 XmlWriter 메서드를 사용하여 요소 노드를 작성할 수 있습니다. 예제는 나열된 메서드를 참조하세요.

사용할 용어 To
WriteElementString 문자열 값을 포함하여 전체 요소 노드를 작성합니다.
WriteStartElement 여러 메서드 호출을 사용하여 요소 값을 작성합니다. 예를 들어 형식화된 값을 작성하거나, WriteCharEntity 문자 엔터티를 작성하거나, 특성을 작성하거나, WriteAttributeString 자식 요소를 작성하도록 호출 WriteValue 할 수 있습니다. 이 메서드의 보다 정교한 버전입니다 WriteElementString .

요소를 닫기 위해 또는 WriteFullEndElement 메서드를 호출합니다WriteEndElement.
WriteNode 개체 XPathNavigator 의 현재 위치에 있는 요소 노드를 XmlReader 복사합니다. 호출되면 원본 개체에서 인스턴스로 모든 항목을 XmlWriter 복사합니다.

쓰기 특성

다음 XmlWriter 메서드를 사용하여 요소 노드에 특성을 작성할 수 있습니다. 다음 섹션에서 설명한 대로 이러한 메서드를 사용하여 요소에 네임스페이스 선언을 만들 수도 있습니다.

사용할 용어 To
WriteAttributeString 문자열 값을 포함하여 전체 특성 노드를 작성하려면
WriteStartAttribute 여러 메서드 호출을 사용하여 특성 값을 작성합니다. 예를 들어 형식화된 값을 작성하도록 호출 WriteValue 할 수 있습니다. 이 메서드의 보다 정교한 버전입니다 WriteElementString .

요소를 닫기 위해 메서드를 호출합니다 WriteEndAttribute .
WriteAttributes 개체의 현재 위치에 있는 모든 특성을 복사합니다 XmlReader . 작성되는 특성은 판독기에서 현재 배치된 노드의 유형에 따라 달라집니다.

- 특성 노드의 경우 현재 특성을 작성한 다음 요소 닫는 태그까지 나머지 특성을 씁니다.
- 요소 노드의 경우 요소에 포함된 모든 특성을 씁니다.
- XML 선언 노드의 경우 선언의 모든 특성을 씁니다.
- 다른 모든 노드 형식의 경우 메서드가 예외를 throw합니다.

네임스페이스 처리

네임스페이스는 XML 문서의 요소 및 특성 이름을 한정하는 데 사용됩니다. 네임스페이스 접두사는 요소와 특성을 네임스페이스와 연결하며, 이 네임스페이스는 URI 참조와 연결됩니다. 네임스페이스는 XML 문서에서 요소 및 특성 이름 고유성을 만듭니다.

XmlWriter 기본 현재 네임스페이스 범위에 정의된 모든 네임스페이스에 해당하는 네임스페이스 스택을 가져옵니다. 요소 및 특성을 작성할 때 다음과 같은 방법으로 네임스페이스를 활용할 수 있습니다.

  • 메서드를 사용하여 네임스페이스를 수동으로 선언합니다 WriteAttributeString . 이 방법은 네임스페이스 선언 수를 가장 잘 최적화하는 방법을 알고 있는 경우에 유용할 수 있습니다. 예를 들어 메서드를 참조하세요 WriteAttributeString(String, String, String, String) .

  • 현재 네임스페이스 선언을 새 네임스페이스로 재정의합니다. 다음 코드에서 메서드는 WriteAttributeString 접두사에 대한 네임스페이스 URI를 "x" .로 "123""abc"변경합니다.

    writer.WriteStartElement("x", "root", "123");
    writer.WriteStartElement("item");
    writer.WriteAttributeString("xmlns", "x", null, "abc");
    writer.WriteEndElement();
    writer.WriteEndElement();
    
    writer.WriteStartElement("x", "root", "123")
    writer.WriteStartElement("item")
    writer.WriteAttributeString("xmlns", "x", Nothing, "abc")
    writer.WriteEndElement()
    writer.WriteEndElement()
    

    코드는 다음 XML 문자열을 생성합니다.

    <x:root xmlns:x="123">
      <item xmlns:x="abc" />
    </x:root>
    
  • 특성 또는 요소를 작성할 때 네임스페이스 접두사를 지정합니다. 요소 및 특성을 작성하는 데 사용되는 많은 메서드를 사용하면 이 작업을 수행할 수 있습니다. 예를 들어 메서드는 WriteStartElement(String, String, String) 시작 태그를 작성하고 지정된 네임스페이스 및 접두사에 연결합니다.

형식화된 데이터 쓰기

이 메서드는 WriteValue CLR(공용 언어 런타임) 개체를 허용하고, XSD(XML 스키마 정의 언어) 데이터 형식 변환 규칙에 따라 입력 값을 문자열 표현으로 변환하고, 메서드를 사용하여 WriteString 작성합니다. 이 방법은 클래스의 메서드 XmlConvert 를 사용하여 입력된 데이터를 문자열 값으로 변환한 후 작성하는 것보다 쉽습니다.

텍스트에 쓸 때 형식화된 값은 해당 스키마 형식에 XmlConvert 대한 규칙을 사용하여 텍스트로 직렬화됩니다.

CLR 형식에 해당하는 기본 XSD 데이터 형식은 메서드를 WriteValue 참조하세요.

XML XmlWriter 데이터 저장소에 쓰는 데 사용할 수도 있습니다. 예를 들어 클래스는 XPathNavigator 개체에 XmlWriter 대한 노드를 만드는 개체를 XmlDocument 만들 수 있습니다. 데이터 저장소에 사용할 수 있는 WriteValue 스키마 정보가 있는 경우 허용되지 않는 형식으로 변환하려고 하면 메서드가 예외를 throw합니다. 데이터 저장소에 사용할 수 있는 스키마 정보가 없는 경우 메서드는 WriteValue 모든 값을 형식으로 xsd:anySimpleType 처리합니다.

XML 작성기 닫기

메서드를 사용하여 XmlWriter XML을 출력하는 경우 메서드를 호출할 때까지 요소와 특성이 Close 작성되지 않습니다. 예를 들어 개체를 채우는 XmlDocument 데 사용하는 XmlWriter 경우 인스턴스를 닫 XmlWriter 을 때까지 대상 문서에서 작성된 요소와 특성을 볼 수 없습니다.

비동기 프로그래밍

XmlWriter 대부분의 메서드에는 메서드 이름의 끝에 "Async"가 있는 비동기 대응 항목이 있습니다. 예를 들어 해당하는 비동기 값은 .입니다 WriteAttributeStringWriteAttributeStringAsync.

WriteValue 비동기 값이 없는 메서드의 경우 반환 값을 문자열로 변환하고 대신 메서드를 WriteStringAsync 사용합니다.

보안 고려 사항

클래스를 사용할 때 다음을 고려합니다 XmlWriter .

  • 예외는 앱에 XmlWriter 버블링하지 않으려는 경로 정보를 공개할 수 있습니다. 앱은 예외를 catch하고 적절하게 처리해야 합니다.

  • XmlWriter는 또는 WriteRaw 메서드에 전달되는 데이터의 유효성을 WriteDocType 검사하지 않습니다. 이러한 메서드에 임의의 데이터를 전달해서는 안 됩니다.