XmlTextWriter 类

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

**命名空间:**System.Xml
**程序集:**System.Xml(在 system.xml.dll 中)

语法

声明
Public Class XmlTextWriter
    Inherits XmlWriter
用法
Dim instance As XmlTextWriter
public class XmlTextWriter : XmlWriter
public ref class XmlTextWriter : public XmlWriter
public class XmlTextWriter extends XmlWriter
public class XmlTextWriter extends XmlWriter

备注

此类实现 XmlWriter 类。

提示

在 Microsoft .NET Framework 2.0 版 版本中,推荐的做法是使用 System.Xml.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 将命名空间声明提升到根元素,以避免在两个子元素上使其重复。子元素从命名空间声明中选取前缀。

 <root xmlns:x="urn:1">
  <x:item/>
  <x:item/>
 </x: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 关联的属性必须具有前缀(默认命名空间不应用于这些属性)。这与 W3C 有关 XML 中命名空间建议的 5.2 节一致。如果属性引用命名空间 URI 但没有指定前缀,则编写器为属性生成前缀。

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

String 用作方法参数时,空引用(在 Visual Basic 中为 Nothing) 和 String.Empty 是等效的。String.Empty 遵循 W3C 规则。

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

 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 未验证传递到 WriteDocTypeWriteRaw 方法的任何数据。您不应将任意数据传递给这些方法。

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

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

继承层次结构

System.Object
   System.Xml.XmlWriter
    System.Xml.XmlTextWriter

线程安全

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

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

XmlTextWriter 成员
System.Xml 命名空间

其他资源

XML 文档和数据
安全性和 System.Xml 应用程序