XmlTextWriter 类

定义

表示一个编写器,该编写器提供快速、非缓存的、仅向前的方法来生成包含符合 W3C 可扩展标记语言 (XML) 1.0 和 XML 建议中的命名空间的 XML 数据的文件。

建议改用 XmlWriter 类。

public ref class XmlTextWriter : System::Xml::XmlWriter
public class XmlTextWriter : System.Xml.XmlWriter
type XmlTextWriter = class
    inherit XmlWriter
Public Class XmlTextWriter
Inherits XmlWriter
继承
XmlTextWriter

注解

XmlTextWriter 类实现该 XmlWriter 类。

注释

建议使用XmlWriter方法和XmlWriter.Create类创建XmlWriterSettings实例,以利用新功能。

XmlTextWriter 维护与当前元素堆栈中定义的所有命名空间对应的命名空间堆栈。 使用 XmlTextWriter 可以手动声明命名空间。

w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();

此 C# 代码生成以下输出。 XmlTextWriter 将命名空间声明提升到根元素,以避免在两个子元素上复制命名空间声明。 子元素从命名空间声明中选取前缀。

<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</root>

XmlTextWriter 还允许替代当前命名空间声明。 在下面的示例中,命名空间 URI“123”由“abc”重写,以生成 XML 元素 <x:node xmlns:x="abc"/>

w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");

通过使用采用前缀作为参数的写入方法,还可以指定要使用的前缀。 在以下示例中,两个不同的前缀映射到同一命名空间 URI 以生成 XML 文本 <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

如果有多个命名空间声明将不同的前缀映射到同一命名空间 URI,XmlTextWriter 会从后向前遍历命名空间声明堆栈,并选择距离最近的声明。

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

在此 C# 示例中,由于 WriteAttributeString 调用未指定前缀,编写器使用推送到命名空间堆栈的最后一个前缀,并生成以下 XML:

<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>

如果命名空间冲突发生, XmlTextWriter 请通过生成备用前缀来解决这些冲突。 例如,如果属性和元素具有相同的前缀,但命名空间不同, XmlWriter 则为该属性生成备用前缀。 生成的前缀为 n{i},其中 i 是以 1 开始的数字。 每个元素的数字重置为 1。

与命名空间 URI 关联的属性必须具有前缀(默认命名空间不适用于属性)。 这符合 XML 建议中的 W3C 命名空间的第 5.2 部分。 如果属性引用命名空间 URI,但不指定前缀,则编写器将为该属性生成前缀。

编写空元素时,在标记名称和结束标记之间添加额外的空间,例如 <item />。 这与较旧的浏览器兼容。

String 被用作方法参数时,nullString.Empty 是等效的。 String.Empty 遵循 W3C 规则。

若要写入强类型数据,请使用 XmlConvert 类将数据类型转换为字符串。 例如,以下 C# 代码将数据从 DoubleString 转换并写入元素 <price>19.95</price>

Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter 不检查以下内容:

  • 属性和元素名称中的字符无效。
  • 不符合指定编码的 Unicode 字符。 如果 Unicode 字符不适合指定的编码,则 XmlTextWriter 不会将 Unicode 字符转义为字符实体。
  • 重复的属性。
  • DOCTYPE 公共标识符或系统标识符中的字符。

安全注意事项

在处理 XmlTextWriter 类时,需要考虑以下事项。

  • XmlTextWriter 引发的异常可能会泄露您不希望暴露给应用程序的路径信息。 应用程序必须捕获异常并相应地处理它们。

  • XmlTextWriter 传递给另一个应用程序时,其基础流将对该应用程序开放。 如果需要将 XmlTextWriter 传递给半受信任的应用程序,应该改为使用由 XmlWriter 方法创建的 Create 对象。

  • XmlTextWriter 不会验证传递给 WriteDocTypeWriteRaw 方法的任何数据。 不应将任意数据传递给这些方法。

  • 如果默认设置已更改,则不能保证生成的输出是格式正确的 XML 数据。

  • 不接受来自不受信任的源的支持组件(如 Encoding 对象)。

构造函数

名称 说明
XmlTextWriter(Stream, Encoding)

使用指定的流和编码创建类的 XmlTextWriter 实例。

XmlTextWriter(String, Encoding)

使用指定的文件创建类的 XmlTextWriter 实例。

XmlTextWriter(TextWriter)

使用指定的XmlTextWriter值创建类的TextWriter实例。

属性

名称 说明
BaseStream

获取基础流对象。

Formatting

指示如何设置输出的格式。

Indentation

获取或设置在设置为 FormattingFormatting.Indented,层次结构中每个级别要写入的 IndentChar 数。

IndentChar

获取或设置在设置为 Formatting 时用于缩进的Formatting.Indented字符。

Namespaces

获取或设置一个值,该值指示是否支持命名空间。

QuoteChar

获取或设置用于引用属性值的字符。

Settings

XmlWriterSettings获取用于创建此XmlWriter实例的对象。

(继承自 XmlWriter)
WriteState

获取编写器的状态。

XmlLang

获取当前 xml:lang 范围。

XmlSpace

获取表示当前XmlSpace作用域的一个xml:space值。

方法

名称 说明
Close()

关闭此流和基础流。

Dispose()

释放类的 XmlWriter 当前实例使用的所有资源。

(继承自 XmlWriter)
Dispose(Boolean)

释放由托管资源使用 XmlWriter 的非托管资源,并选择性地释放托管资源。

(继承自 XmlWriter)
DisposeAsync()

以异步方式执行与释放、释放或重置非托管资源关联的应用程序定义任务。

(继承自 XmlWriter)
DisposeAsyncCore()

以异步方式执行与释放、释放或重置托管资源关联的应用程序定义任务。

(继承自 XmlWriter)
Equals(Object)

确定指定的对象是否等于当前对象。

(继承自 Object)
Flush()

将缓冲区中的内容刷新到基础流,并刷新基础流。

FlushAsync()

将缓冲区中的内容异步刷新到基础流,并刷新基础流。

(继承自 XmlWriter)
GetHashCode()

用作默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
LookupPrefix(String)

返回在命名空间 URI 的当前命名空间范围中定义的最接近的前缀。

MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

返回一个表示当前对象的字符串。

(继承自 Object)
WriteAttributes(XmlReader, Boolean)

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

(继承自 XmlWriter)
WriteAttributesAsync(XmlReader, Boolean)

异步写入在当前位置 XmlReader找到的所有属性。

(继承自 XmlWriter)
WriteAttributeString(String, String, String, String)

在派生类中重写时,写出具有指定前缀、本地名称、命名空间 URI 和值的属性。

(继承自 XmlWriter)
WriteAttributeString(String, String, String)

在派生类中重写时,写入具有指定本地名称、命名空间 URI 和值的属性。

(继承自 XmlWriter)
WriteAttributeString(String, String)

在派生类中重写时,写出具有指定本地名称和值的属性。

(继承自 XmlWriter)
WriteAttributeStringAsync(String, String, String, String)

以异步方式写出具有指定前缀、本地名称、命名空间 URI 和值的属性。

(继承自 XmlWriter)
WriteBase64(Byte[], Int32, Int32)

将指定的二进制字节编码为 base64,并写出生成的文本。

WriteBase64Async(Byte[], Int32, Int32)

将指定的二进制字节异步编码为 Base64,并写出生成的文本。

(继承自 XmlWriter)
WriteBinHex(Byte[], Int32, Int32)

将指定的二进制字节编码为 binhex 并写出生成的文本。

WriteBinHexAsync(Byte[], Int32, Int32)

异步编码指定的二进制字节, BinHex 并写出生成的文本。

(继承自 XmlWriter)
WriteCData(String)

写出 ! <[CDATA]。]> 包含指定文本的块。

WriteCDataAsync(String)

异步写出 <![CDATA]。]> 包含指定文本的块。

(继承自 XmlWriter)
WriteCharEntity(Char)

强制为指定的 Unicode 字符值生成字符实体。

WriteCharEntityAsync(Char)

异步强制为指定的 Unicode 字符值生成字符实体。

(继承自 XmlWriter)
WriteChars(Char[], Int32, Int32)

一次写入一个缓冲区的文本。

WriteCharsAsync(Char[], Int32, Int32)

一次异步写入一个缓冲区的文本。

(继承自 XmlWriter)
WriteComment(String)

写出包含指定文本的注释 <--...--> 。

WriteCommentAsync(String)

异步写出包含指定文本的注释 <--...--> 。

(继承自 XmlWriter)
WriteDocType(String, String, String, String)

编写具有指定名称和可选属性的 DOCTYPE 声明。

WriteDocTypeAsync(String, String, String, String)

使用指定的名称和可选属性异步写入 DOCTYPE 声明。

(继承自 XmlWriter)
WriteElementString(String, String, String, String)

写入具有指定前缀、本地名称、命名空间 URI 和值的元素。

(继承自 XmlWriter)
WriteElementString(String, String, String)

写入具有指定本地名称、命名空间 URI 和值的元素。

(继承自 XmlWriter)
WriteElementString(String, String)

写入具有指定本地名称和值的元素。

(继承自 XmlWriter)
WriteElementStringAsync(String, String, String, String)

异步写入具有指定前缀、本地名称、命名空间 URI 和值的元素。

(继承自 XmlWriter)
WriteEndAttribute()

关闭上一 WriteStartAttribute(String, String, String) 个调用。

WriteEndAttributeAsync()

异步关闭上一 WriteStartAttribute(String, String) 次调用。

(继承自 XmlWriter)
WriteEndDocument()

关闭任何打开的元素或属性,并将编写器重新置于“开始”状态。

WriteEndDocumentAsync()

异步关闭任何打开的元素或属性,并将编写器重新置于“开始”状态。

(继承自 XmlWriter)
WriteEndElement()

关闭一个元素并弹出相应的命名空间范围。

WriteEndElementAsync()

异步关闭一个元素并弹出相应的命名空间范围。

(继承自 XmlWriter)
WriteEntityRef(String)

将实体引用写出为 &name;.

WriteEntityRefAsync(String)

以异步方式将实体引用写出为 &name;.

(继承自 XmlWriter)
WriteFullEndElement()

关闭一个元素并弹出相应的命名空间范围。

WriteFullEndElementAsync()

异步关闭一个元素并弹出相应的命名空间范围。

(继承自 XmlWriter)
WriteName(String)

写出指定的名称,确保它根据 W3C XML 1.0 建议是有效的名称。

WriteNameAsync(String)

异步写出指定名称,确保它根据 W3C XML 1.0 建议(https://www.w3.org/TR/1998/REC-xml-19980210#NT-Name) 是有效的名称。

(继承自 XmlWriter)
WriteNmToken(String)

写出指定的名称,确保它根据 NmToken有效

WriteNmTokenAsync(String)

根据 W3C XML 1.0 建议https://www.w3.org/TR/1998/REC-xml-19980210#NT-Name()异步写出指定名称,确保它是有效的 NmToken。

(继承自 XmlWriter)
WriteNode(XmlReader, Boolean)

在派生类中重写时,将读取器的所有内容复制到编写器,并将读取器移动到下一个兄弟姐妹的开头。

(继承自 XmlWriter)
WriteNode(XPathNavigator, Boolean)

将对象的所有内容 XPathNavigator 复制到编写器。 该位置 XPathNavigator 保持不变。

(继承自 XmlWriter)
WriteNodeAsync(XmlReader, Boolean)

将读取器的所有内容异步复制到编写器,并将读取器移动到下一个同级级的开头。

(继承自 XmlWriter)
WriteNodeAsync(XPathNavigator, Boolean)

将对象中 XPathNavigator 的所有内容异步复制到编写器。 该位置 XPathNavigator 保持不变。

(继承自 XmlWriter)
WriteProcessingInstruction(String, String)

写出名称与文本之间的空格的处理指令,如下所示: <“name text?”>。

WriteProcessingInstructionAsync(String, String)

异步写出名称与文本之间的空格的处理指令,如下所示:<“名称文本”。>

(继承自 XmlWriter)
WriteQualifiedName(String, String)

写出命名空间限定的名称。 此方法查找位于给定命名空间范围内的前缀。

WriteQualifiedNameAsync(String, String)

异步写出命名空间限定的名称。 此方法查找位于给定命名空间范围内的前缀。

(继承自 XmlWriter)
WriteRaw(Char[], Int32, Int32)

从字符缓冲区手动写入原始标记。

WriteRaw(String)

从字符串手动写入原始标记。

WriteRawAsync(Char[], Int32, Int32)

从字符缓冲区手动异步写入原始标记。

(继承自 XmlWriter)
WriteRawAsync(String)

从字符串中手动异步写入原始标记。

(继承自 XmlWriter)
WriteStartAttribute(String, String, String)

写入属性的开头。

WriteStartAttribute(String, String)

写入具有指定本地名称和命名空间 URI 的属性的开头。

(继承自 XmlWriter)
WriteStartAttribute(String)

写入具有指定本地名称的属性的开头。

(继承自 XmlWriter)
WriteStartAttributeAsync(String, String, String)

异步写入具有指定前缀、本地名称和命名空间 URI 的属性的开头。

(继承自 XmlWriter)
WriteStartDocument()

使用版本“1.0”编写 XML 声明。

WriteStartDocument(Boolean)

使用版本“1.0”和独立属性编写 XML 声明。

WriteStartDocumentAsync()

使用版本“1.0”异步写入 XML 声明。

(继承自 XmlWriter)
WriteStartDocumentAsync(Boolean)

使用版本“1.0”和独立属性异步写入 XML 声明。

(继承自 XmlWriter)
WriteStartElement(String, String, String)

写入指定的开始标记,并将其与给定的命名空间和前缀相关联。

WriteStartElement(String, String)

在派生类中重写时,写入指定的开始标记并将其与给定命名空间相关联。

(继承自 XmlWriter)
WriteStartElement(String)

在派生类中重写时,写出具有指定本地名称的起始标记。

(继承自 XmlWriter)
WriteStartElementAsync(String, String, String)

异步写入指定的开始标记,并将其与给定的命名空间和前缀相关联。

(继承自 XmlWriter)
WriteString(String)

写入给定的文本内容。

WriteStringAsync(String)

异步写入给定的文本内容。

(继承自 XmlWriter)
WriteSurrogateCharEntity(Char, Char)

生成并写入代理项字符对的代理项字符实体。

WriteSurrogateCharEntityAsync(Char, Char)

异步生成和写入代理项字符对的代理项字符实体。

(继承自 XmlWriter)
WriteValue(Boolean)

写入值 Boolean

(继承自 XmlWriter)
WriteValue(DateTime)

写入值 DateTime

(继承自 XmlWriter)
WriteValue(DateTimeOffset)

写入值 DateTimeOffset

(继承自 XmlWriter)
WriteValue(Decimal)

写入值 Decimal

(继承自 XmlWriter)
WriteValue(Double)

写入值 Double

(继承自 XmlWriter)
WriteValue(Int32)

写入值 Int32

(继承自 XmlWriter)
WriteValue(Int64)

写入值 Int64

(继承自 XmlWriter)
WriteValue(Object)

写入对象值。

(继承自 XmlWriter)
WriteValue(Single)

写入单精度浮点数。

(继承自 XmlWriter)
WriteValue(String)

写入值 String

(继承自 XmlWriter)
WriteWhitespace(String)

写出给定的空格。

WriteWhitespaceAsync(String)

异步写出给定的空格。

(继承自 XmlWriter)

显式接口实现

名称 说明
IDisposable.Dispose()

有关此成员的说明,请参阅 Dispose()

(继承自 XmlWriter)

扩展方法

名称 说明
ConfigureAwait(IAsyncDisposable, Boolean)

配置如何执行从异步可释放项返回的任务的 await。

适用于

另请参阅