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

例外狀況

readernull

讀取器不在 elementattributeXmlDeclaration 節點上。

在先前的非同步作業完成前呼叫了 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>

備註

如果讀取器位於 element 節點上 WriteAttributes ,則會複製所有自主屬性。 如果讀取器位於 attribute 節點上,這個方法會寫入目前的屬性,然後其餘的屬性直到專案結束記號為止。 如果讀取器位於 XmlDeclaration 節點上,這個方法會寫入宣告中的所有屬性。 如果讀取器位於任何其他節點類型上,這個方法會擲回 XmlException

如果使用 呼叫 XmlValidatingReader 這個方法,以確保格式正確的 XML 任何內容 (已從實體擴充,) 可能會導致寫入時取代不正確檔。 例如,如果屬性包含已展開的 &gt; 實體,為了確保在寫出 &gt; 時會取代展開>格式正確的檔。

如需這個方法的非同步版本,請參閱 WriteAttributesAsync

適用於