XmlWriter.WriteAttributes(XmlReader, Boolean) 메서드

정의

파생 클래스에서 재정의되면 XmlReader의 현재 위치에 있는 모든 특성을 작성합니다.

public:
 virtual void WriteAttributes(System::Xml::XmlReader ^ reader, bool defattr);
public virtual void WriteAttributes (System.Xml.XmlReader reader, bool defattr);
abstract member WriteAttributes : System.Xml.XmlReader * bool -> unit
override this.WriteAttributes : System.Xml.XmlReader * bool -> unit
Public Overridable Sub WriteAttributes (reader As XmlReader, defattr As Boolean)

매개 변수

reader
XmlReader

특성을 복사할 원본 XmlReader입니다.

defattr
Boolean

true에서 기본 특성을 복사하려면 XmlReader이고, 그렇지 않으면 false입니다.

예외

reader이(가) null인 경우

판독기가 element, attribute 또는 XmlDeclaration 노드에 배치되지 않은 경우

이전 비동기 작업이 완료되기 전에 XmlWriter 메서드가 호출되었습니다. 이 경우 “비동기 작업이 이미 진행 중입니다.” 메시지를 나타내며 InvalidOperationException이 throw됩니다.

예제

다음 예제에서는 모든 요소를 출력에 복사하고, 태그 이름을 대문자로 변경하고, 변경되지 않은 모든 특성을 복사합니다.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
void main()
{
   XmlReader^ reader = XmlReader::Create( L"test1.xml" );
   XmlWriterSettings^ settings = gcnew XmlWriterSettings;
   settings->Indent = true;
   XmlWriter^ writer = XmlWriter::Create( Console::Out );
   while ( reader->Read() )
   {
      if ( reader->NodeType == XmlNodeType::Element )
      {
         writer->WriteStartElement( reader->Name->ToUpper() );
         writer->WriteAttributes( reader, false );
         if ( reader->IsEmptyElement )
                  writer->WriteEndElement();
      }
      else
      if ( reader->NodeType == XmlNodeType::EndElement )
      {
         writer->WriteEndElement();
      }
   }

   writer->Close();
   reader->Close();
}
using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlReader reader = XmlReader.Create("test1.xml");
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    XmlWriter writer = XmlWriter.Create(Console.Out);

    while (reader.Read()) {
      if (reader.NodeType == XmlNodeType.Element) {
        writer.WriteStartElement(reader.Name.ToUpper());
        writer.WriteAttributes(reader, false);
        if (reader.IsEmptyElement) writer.WriteEndElement();
      }
      else if (reader.NodeType == XmlNodeType.EndElement) {
        writer.WriteEndElement();
      }
    }
    writer.Close();
    reader.Close();
  }
}
Option Strict
Option Explicit

Imports System.IO
Imports System.Xml

Public Class Sample
    
  Public Shared Sub Main()

    Dim reader As XmlReader = XmlReader.Create("test1.xml")
    Dim settings As XmlWriterSettings = new XmlWriterSettings()
    settings.Indent = true
    Dim writer As XmlWriter = XmlWriter.Create(Console.Out)
        
      While reader.Read()
          If reader.NodeType = XmlNodeType.Element Then
              writer.WriteStartElement(reader.Name.ToUpper())
              writer.WriteAttributes(reader, False)
              If reader.IsEmptyElement Then
                 writer.WriteEndElement()
              End If
          Else
              If reader.NodeType = XmlNodeType.EndElement Then
                  writer.WriteEndElement()
              End If
          End If
      End While
      writer.Close()
      reader.Close()

    End Sub
End Class

이 예제에서는 파일을 test1.xml입력으로 사용합니다.

<test a="1" b="2">
    <item c="3" d="4" e="5" f="6"/>
</test>

설명

판독기를 노드 WriteAttributeselement 배치하면 포함된 모든 특성이 복사됩니다. 판독기를 노드에 attribute 배치하는 경우 이 메서드는 현재 특성을 쓰고 나머지 특성은 요소 닫는 태그까지 씁니다. 판독기를 노드에 XmlDeclaration 배치하는 경우 이 메서드는 선언의 모든 특성을 씁니다. 판독기를 다른 노드 형식에 배치하면 이 메서드가 throw됩니다 XmlException.

이 메서드를 사용하여 XmlValidatingReader호출하는 경우 올바른 형식의 XML을 확인하여 문서 작성 시 잘못된 문서가 발생할 수 있는 모든 콘텐츠(엔터티에서 확장됨)를 바꿉니다. 예를 들어 특성에 확장된 엔터티가 포함된 &gt; 경우 잘 구성된 문서를 작성할 때 &gt;확장된 > 바뀝니다.

이 메서드의 비동기 버전은 다음을 참조하세요 WriteAttributesAsync.

적용 대상