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

XmlReader の既定の属性をコピーする場合は true。それ以外の場合は false

例外

readernullです。

リーダーが element ノード、attribute ノード、または XmlDeclaration ノードに配置されていません。

先行の非同期操作が完了する前に、XmlWriter メソッドが呼び出されました。 この場合、「非同期操作が既に実行されています」というメッセージと共に InvalidOperationException がスローされます。

次の例では、すべての要素を出力にコピーし、タグ名を大文字に変更し、すべての属性を変更せずにコピーします。

#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>

注釈

リーダーがノードWriteAttributes上にelement配置されている場合は、含まれるすべての属性がコピーされます。 リーダーがノードに attribute 配置されている場合、このメソッドは現在の属性を書き込み、残りの属性は要素終了タグまで書き込みます。 リーダーがノードに XmlDeclaration 配置されている場合、このメソッドは宣言内のすべての属性を書き込みます。 リーダーが他のノード型に配置されている場合、このメソッド XmlExceptionは .

このメソッドを使用して XmlValidatingReader呼び出した場合は、正しい形式の XML を作成するときに無効なドキュメントになる可能性のあるコンテンツ (エンティティから拡張された) が置き換えられます。 たとえば、拡張されたエンティティが属性に含まれている &gt; 場合は、適切な形式のドキュメントを作成するために、展開された>がで書き出 &gt;されたときに置き換えられます。

このメソッドの非同期バージョンについては、次を参照してください WriteAttributesAsync

適用対象