Udostępnij za pośrednictwem


XmlWriter.WriteAttributes(XmlReader, Boolean) Metoda

Definicja

Po przesłonięcia w klasie pochodnej zapisuje wszystkie atrybuty znalezione w bieżącym położeniu w obiekcie 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)

Parametry

reader
XmlReader

Element XmlReader , z którego mają być skopiowane atrybuty.

defattr
Boolean

true do skopiowania atrybutów domyślnych z ; XmlReaderw przeciwnym razie false.

Wyjątki

reader to null.

Czytnik nie jest umieszczony w węźle elementattribute lub XmlDeclaration .

Metoda XmlWriter została wywołana przed zakończeniem poprzedniej operacji asynchronicznej. W takim przypadku InvalidOperationException jest zgłaszany komunikat "Operacja asynchroniczna jest już w toku".

Przykłady

Poniższy przykład kopiuje wszystkie elementy do danych wyjściowych, zmienia nazwy tagów na wielkie litery i kopiuje wszystkie atrybuty bez zmian.

#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

W przykładzie użyto pliku , test1.xmljako danych wejściowych.

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

Uwagi

Jeśli czytnik znajduje się w węźle element WriteAttributes , kopiuje wszystkie zawarte atrybuty. Jeśli czytnik jest umieszczony w węźle attribute , ta metoda zapisuje bieżący atrybut, a następnie pozostałe atrybuty aż do tagu zamknięcia elementu. Jeśli czytnik jest umieszczony w węźle XmlDeclaration , ta metoda zapisuje wszystkie atrybuty w deklaracji . Jeśli czytnik znajduje się w innym typie węzła, metoda zgłasza błąd XmlException.

Jeśli ta metoda jest wywoływana przy użyciu metody XmlValidatingReader, w celu zapewnienia poprawnie sformułowanej zawartości XML (która została rozwinięta z jednostek), która może spowodować zastąpienie nieprawidłowego dokumentu podczas zapisywania. Jeśli na przykład atrybut zawiera &gt; jednostkę, która została rozszerzona, aby upewnić się, że dobrze sformułowany dokument rozszerzonej > jest zastępowany podczas zapisywania za pomocą &gt;polecenia .

Aby uzyskać asynchroniczną wersję tej metody, zobacz WriteAttributesAsync.

Dotyczy