XmlWriter.WriteAttributes(XmlReader, Boolean) 方法

定义

当在派生类中被重写时,写出在 XmlReader 中当前位置找到的所有属性。

C#
public virtual void WriteAttributes (System.Xml.XmlReader reader, bool defattr);

参数

reader
XmlReader

从其中复制属性的 XmlReader

defattr
Boolean

如果为 true,则从 XmlReader 中复制默认属性;否则为 false

例外

readernull

读取器不是定位在 elementattributeXmlDeclaration 节点上。

在上一次异步操作完成之前调用了 XmlWriter 方法。 在此情况下,会引发 InvalidOperationException 并显示消息“异步操作已在进行中。”

示例

以下示例将所有元素复制到输出,将标记名称更改为大写,并复制所有属性不变。

C#
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();
  }
}

该示例使用该文件 test1.xml作为输入。

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

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0