System.Xml.XmlTextWriter 类

方法描述

表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议)的流或文件。

语法定义(C# System.Xml.XmlTextWriter 类 的用法)

public class XmlTextWriter : XmlWriter

构造函数

构造函数名称 构造函数描述
XmlTextWriter(TextWriter) 使用指定的 TextWriter 创建 XmlTextWriter 类的实例。
XmlTextWriter(Stream, Encoding) 使用指定的流和编码方式创建 XmlTextWriter 类的实例。
XmlTextWriter(String, Encoding) 使用指定的文件创建 XmlTextWriter 类的实例。

成员/方法

方法名称 方法描述
Close 关闭此流和基础流。 (重写 XmlWriter.Close()。)
Dispose(Boolean) 释放由 XmlWriter 占用的非托管资源,还可以另外再释放托管资源。 (继承自 XmlWriter。)
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
Flush 将缓冲区中的所有内容刷新到基础流,并同时刷新基础流。 (重写 XmlWriter.Flush()。)
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetType 获取当前实例的 Type。 (继承自 Object。)
LookupPrefix 返回在当前命名空间范围中为该命名空间 URI 定义的最近的前缀。 (重写 XmlWriter.LookupPrefix(String)。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ToString 返回表示当前对象的字符串。 (继承自 Object。)
WriteAttributes 当在派生类中被重写时,写出在 XmlReader 中当前位置找到的所有特性。 (继承自 XmlWriter。)
WriteAttributeString(String, String) 当在派生类中被重写时,写出具有指定的本地名称和值的特性。 (继承自 XmlWriter。)
WriteAttributeString(String, String, String) 当在派生类中被重写时,写入具有指定的本地名称、命名空间 URI 和值的特性。 (继承自 XmlWriter。)
WriteAttributeString(String, String, String, String) 当在派生类中被重写时,写出具有指定的前缀、本地名称、命名空间 URI 和值的特性。 (继承自 XmlWriter。)
WriteBase64 将指定的二进制字节编码为 Base64 并写出结果文本。 (重写 XmlWriter.WriteBase64(Byte[], Int32, Int32)。)
WriteBinHex 将指定的二进制字节编码为 BinHex 并写出结果文本。 (重写 XmlWriter.WriteBinHex(Byte[], Int32, Int32)。)
WriteCData 写出包含指定文本的 块。 (重写 XmlWriter.WriteCData(String)。)
WriteCharEntity 为指定的 Unicode 字符值强制生成字符实体。 (重写 XmlWriter.WriteCharEntity(Char)。)
WriteChars 以每次一个缓冲区的方式写入文本。 (重写 XmlWriter.WriteChars(Char[], Int32, Int32)。)
WriteComment 写出包含指定文本的注释 。 (重写 XmlWriter.WriteComment(String)。)
WriteDocType 写出具有指定名称和可选特性的 DOCTYPE 声明。 (重写 XmlWriter.WriteDocType(String, String, String, String)。)
WriteElementString(String, String) 编写具有指定的本地名称和值的元素。 (继承自 XmlWriter。)
WriteElementString(String, String, String) 使用指定的本地名称、命名空间 URI 和值编写元素。 (继承自 XmlWriter。)
WriteElementString(String, String, String, String) 使用指定的本地名称、命名空间 URI 和值编写元素。 (继承自 XmlWriter。)
WriteEndAttribute 关闭上一个 WriteStartAttribute 调用。 (重写 XmlWriter.WriteEndAttribute()。)
WriteEndDocument 关闭任何打开的元素或特性并将编写器重新设置为 Start 状态。 (重写 XmlWriter.WriteEndDocument()。)
WriteEndElement 关闭一个元素并弹出相应的命名空间范围。 (重写 XmlWriter.WriteEndElement()。)
WriteEntityRef 按 &name; 写出实体引用。 (重写 XmlWriter.WriteEntityRef(String)。)
WriteFullEndElement 关闭一个元素并弹出相应的命名空间范围。 (重写 XmlWriter.WriteFullEndElement()。)
WriteName 写出指定的名称,确保它是符合 W3C XML 1.0 建议 (http://www.w3.org/TR/1998/REC-xml-19980210#NT-Name) 的有效名称。 (重写 XmlWriter.WriteName(String)。)
WriteNmToken 写出指定的名称,确保它是符合 W3C XML 1.0 建议 (http://www.w3.org/TR/1998/REC-xml-19980210#NT-Name) 的有效 NmToken。 (重写 XmlWriter.WriteNmToken(String)。)
WriteNode(XmlReader, Boolean) 当在派生类中被重写时,将所有内容从读取器复制到编写器并将读取器移动到下一个同级的开始位置。 (继承自 XmlWriter。)
WriteNode(XPathNavigator, Boolean) 将所有内容从 XPathNavigator 对象复制到编写器。 XPathNavigator 的位置保持不变。 (继承自 XmlWriter。)
WriteProcessingInstruction 写出在名称和文本之间带有空格的处理指令,如下所示:。 (重写 XmlWriter.WriteProcessingInstruction(String, String)。)
WriteQualifiedName 写出命名空间限定的名称。 此方法查找位于给定命名空间范围内的前缀。 (重写 XmlWriter.WriteQualifiedName(String, String)。)
WriteRaw(String) 从字符串手动编写原始标记。 (重写 XmlWriter.WriteRaw(String)。)
WriteRaw(Char[], Int32, Int32) 从字符缓冲区手动编写原始标记。 (重写 XmlWriter.WriteRaw(Char[], Int32, Int32)。)
WriteStartAttribute(String) 用指定的本地名称编写特性的起点。 (继承自 XmlWriter。)
WriteStartAttribute(String, String) 编写具有指定本地名称和命名空间 URI 的特性的起始内容。 (继承自 XmlWriter。)
WriteStartAttribute(String, String, String) 编写特性的起始内容。 (重写 XmlWriter.WriteStartAttribute(String, String, String)。)
WriteStartDocument() 编写版本为“1.0”的 XML 声明。 (重写 XmlWriter.WriteStartDocument()。)
WriteStartDocument(Boolean) 编写版本为“1.0”并具有独立特性的 XML 声明。 (重写 XmlWriter.WriteStartDocument(Boolean)。)
WriteStartElement(String) 当在派生类中被重写时,写出具有指定的本地名称的开始标记。 (继承自 XmlWriter。)
WriteStartElement(String, String) 当在派生类中被重写时,写出指定的开始标记并将其与给定的命名空间关联起来。 (继承自 XmlWriter。)
WriteStartElement(String, String, String) 写出指定的开始标记并将其与给定的命名空间和前缀关联起来。 (重写 XmlWriter.WriteStartElement(String, String, String)。)
WriteString 编写给定的文本内容。 (重写 XmlWriter.WriteString(String)。)
WriteSurrogateCharEntity 为代理项字符对生成并编写代理项字符实体。 (重写 XmlWriter.WriteSurrogateCharEntity(Char, Char)。)
WriteValue(Boolean) 写入一个 Boolean 值。 (继承自 XmlWriter。)
WriteValue(DateTime) 编写一个 DateTime 值。 (继承自 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 写出给定的空白。 (重写 XmlWriter.WriteWhitespace(String)。)

提示和注释

此类实现 XmlWriter 类。

注意

在 .NET Framework 2.0 版 版本中,推荐的做法是使用 XmlWriter.Create 方法和 XmlWriterSettings 类创建 XmlWriter 实例。 这使您可以充分利用此版本中引入的所有新功能。 有关更多信息,请参见 创建 XML 编写器。

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 将命名空间声明提升到根元素,以避免在两个子元素上使其重复。 子元素从命名空间声明中选取前缀。

复制

XmlTextWriter 还允许重写当前命名空间声明。 在下面的示例中,命名空间 URI“123”被“abc”重写以产生 XML 元素

复制

w.WriteStartElement("x","node","123");

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

通过使用将前缀作为参数的写入方法,您还可以指定要使用的前缀。 在下面的示例中,两个不同的前缀映射到同一个命名空间 URI 以产生 XML 文本

复制

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:

复制

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

与命名空间 URI 关联的特性必须具有前缀(默认命名空间不应用于这些特性)。 这与 W3C 有关 XML 中命名空间建议的 5.2 节一致。 如果特性引用命名空间 URI 但没有指定前缀,则编写器为特性生成前缀。

写空元素时,标记名与结束标记之间会添加一个额外的空格,例如 。 这提供与早期浏览器的兼容性。

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

若要写强类型数据,请使用 XmlConvert 类将数据类型转换为字符串。 例如,下面的 C# 代码将数据从 Double 转换为 String 并写入元素 19.95

复制

Double price = 19.95;

writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter 不检查下面的内容:

特性和元素名称中的无效字符。

不适合指定编码的 Unicode 字符。 如果 Unicode 字符不适合指定的编码,则 XmlTextWriter 就不会将该 Unicode 字符转义为字符实体。

重复的特性。

DOCTYPE 公共标识符或系统标识符中的字符。

有关编写 XML 的更多信息,请参见 用 XmlWriter 编写 XML。

安全注意事项

下面是使用 XmlTextWriter 类时的注意事项。

XmlTextWriter 引发的异常可能会泄漏您不希望冒泡到应用程序的路径信息。 应用程序必须捕捉并适当处理这些异常。

将 XmlTextWriter 传递到其他应用程序时,基础流公开到该应用程序。 如果需要将 XmlTextWriter 传递到不完全受信任的应用程序,应改为使用 Create 方法创建的 XmlWriter 对象。

XmlTextWriter 未验证传递到 WriteDocType 或 WriteRaw 方法的任何数据。 您不应将任意数据传递给这些方法。

如果更改了默认设置,则不保证生成的输出是格式良好的 XML 数据。

不要接受来自不受信任的源的支持组件,如 Encoding 对象。

System.Xml.XmlTextWriter 类例子


继承层次结构

System.Object

System.Xml.XmlWriter

System.Xml.XmlTextWriter

命名空间

namespace: System.Xml

程序集: System.Xml(在 System.Xml.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。