类似于XmlReader,.NET Framework也提供了一个快速、非缓存、只向前的方式动态写入XML数据的类,即XmlWriter类。完全可以将XmlWriter对象理解为XmlReader对象的对等对象。请注意XML文档不是字符串,不要试图使用操作字符串的方式操作XML。下面让我们看看XmlWriter类的重要属性和方法:
1、XmlWriter类的重要属性
4、WriteState枚举的成员
下面让我们看一个示例:
生成的XML文件的内容:
1、XmlWriter类的重要属性
属 性 |
说 明 |
Settings | 返回用于创建XmlWriter对象实例的XmlWriterSettings对象 |
WriteState | 以WriterState枚举的形式返回书写器的状态 |
XmlLang | 获得当前的xml:lang范围;xml:lang属性为作者提供了一种可靠的方法,以区别包含在特定文档中的特定语言 |
XmlSpace | 以XmlSpace对象的形式获得当前Xml:space的范围;XmlSpace属性允许元素向应用程序声明它们的空白是否有意义 |
2、XmlWriter类的重要方法
方 法 |
说 明 |
Close | 关闭当前流和底层流 |
Create | 创建并返回XmlWriter对象的一个实例 |
WriteAttributes | 写出在XmlReader对象中当前位置上找到的所有属性 |
WriteAttributeString | 以指定值写入属性 |
WriteBase64 | 以base64对指定的二进制字节进行编码并写出结果文本 |
WriteCData | 写出包含指定文本的CData区域 |
WriteCharEntity | 以十六进制字符实体引用格式写出Unicode字符 |
WriteChars | 用于一次在一个缓冲中写入大量文本 |
WriteComment | 写出包含指定文本的XmlComment |
WriteDocType | 用指定的名称和可选的属性写出DOCTYPE声明 |
WriteElementString | 写入一个包含指定字符串值的元素 |
WriteEndAttribute | 关闭由XmlWriter初始化的前一个WriteStartAttribute方法调用 |
WriteEndDoducment | 关闭所有打开的元素和属性并将书写器设回开始状态 |
WriteEndElement | 关闭由XmlWriter的WriterStartElement方法创建并打开的元素;如果该元素没有包含内容,就写入一个短结束标签“/>”;否则,将写入一个完整的结束标签 |
WriteEntityRef | 写出一个实体引用 |
WriteFullEndElement | 关闭打开的元素。这个方法与WriteEndElement方法的不同之处在于当要写入空元素时是否可见。这个方法通过写入完整的结束标签总是会关闭打开的标签,并特别用于在写入用于嵌入HTML脚本代码块的标签 |
WriteName | 写出指定的名称 |
WriteNode | 从源对象中复制所有内容至当前的书写器实例 |
WriteProcessingInstruction | 在名称和文本之间写出一个处理指令 |
WriteQualifiedName | 通过在给定的命名空间范围内查找前缀名来写出命名空间限定的名称 |
WriteRaw | 不检查内容而手动写出原始标记 |
WriteStartAttribute | 写入属性的开始 |
WriteStartDocument | 写入XML声明 |
WriteStartElement | 写出指定的开始标签 |
WriteString | 写出所提供的文本内容 |
WriteValue | 将所提供的值作为单类型值写出 |
WriteWhilespace | 写出给定的空白 |
3、XmlWriterSettings类的重要属性
属 性 | 说 明 |
CheckCharacters | 获得或设置用来指示是否要执行字符检查的值 |
Encoding | 获得或设置以Encoding对象的形式使用的文本编码 |
Indent | 获得或设置用来指示是否缩排元素的布尔值 |
IndentChars | 获得或设置在缩排时使用的字符串 |
NewLineChars | 获得或设置用于换行的字符串 |
NewLineOnAttributes | 获得或设置用于指示属性是否写入新行的布尔值 |
OmitXmlDeclaration | 获得或设置用于指示是否应该写入XML声明的布尔值 |
4、WriteState枚举的成员
状 态 | 说 明 |
Attribute | 当写入属性的时候,书写器进入这个状态 |
Closed | 当调用Close方法并且书写器不再用于写入操作的时候,进入这个状态 |
Content | 当写入节点内容的时候,书写器进入这个状态 |
Element | 当写入元素的开始标签的时候,书写器进入这个状态 |
Error | 在写入操作时提示一个错误,并阻止书写器继续操作 |
Prolog | 书写器正在写入格式良好的XML1.0文档的前言(即用于声明元素名称、属性和数据类型有效标记的构建规则的区域) |
Start | 书写器处于初始状态,并等待书写器的调用 |
下面让我们看一个示例:
//aspx代码:
protected void Page_Load(object sender, EventArgs e)
{
string xmlPath = Server.MapPath("~/Employee.xml");
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
setting.IndentChars = "\t";
using (XmlWriter writer = XmlWriter.Create(xmlPath,setting))
{
writer.WriteStartDocument(false);
writer.WriteComment("This XML file represents the details of an employee");
writer.WriteStartElement("employees");
writer.WriteStartElement("employee");
writer.WriteAttributeString("id", "1");
writer.WriteStartElement("name");
writer.WriteElementString("firstName", "Nancy");
writer.WriteElementString("lastName", "lastName");
writer.WriteEndElement();
writer.WriteElementString("city", "Seattle");
writer.WriteElementString("state", "WA");
writer.WriteElementString("zipCode", "98122");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
lblResult.Text = "File is written successfully!";
}
}
protected void Page_Load(object sender, EventArgs e)
{
string xmlPath = Server.MapPath("~/Employee.xml");
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
setting.IndentChars = "\t";
using (XmlWriter writer = XmlWriter.Create(xmlPath,setting))
{
writer.WriteStartDocument(false);
writer.WriteComment("This XML file represents the details of an employee");
writer.WriteStartElement("employees");
writer.WriteStartElement("employee");
writer.WriteAttributeString("id", "1");
writer.WriteStartElement("name");
writer.WriteElementString("firstName", "Nancy");
writer.WriteElementString("lastName", "lastName");
writer.WriteEndElement();
writer.WriteElementString("city", "Seattle");
writer.WriteElementString("state", "WA");
writer.WriteElementString("zipCode", "98122");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
lblResult.Text = "File is written successfully!";
}
}
生成的XML文件的内容:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!--This XML file represents the details of an employee-->
<employees>
<employee id="1">
<name>
<firstName>Nancy</firstName>
<lastName>lastName</lastName>
</name>
<city>Seattle</city>
<state>WA</state>
<zipCode>98122</zipCode>
</employee>
</employees>
<!--This XML file represents the details of an employee-->
<employees>
<employee id="1">
<name>
<firstName>Nancy</firstName>
<lastName>lastName</lastName>
</name>
<city>Seattle</city>
<state>WA</state>
<zipCode>98122</zipCode>
</employee>
</employees>