Language

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 がスローされます。

例

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

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>

注釈

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

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

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

適用対象