XmlTextWriter 用于生成 XML。
XmlTextWriter 的名称空间是:
System.Xml
StringBuilder media = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new System.IO.StringWriter(media));
writer.Formatting = Formatting.Indented; writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteStartElement("state"); writer.WriteValue((int)State); writer.WriteEndElement(); writer.WriteStartElement("message"); writer.WriteNode(new XmlTextReader(MyMessage.CompositeXml(),
XmlNodeType.Element, null), false); writer.WriteEndElement(); writer.WriteStartElement("writer"); writer.WriteCData(Writer);
writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush();
writer.Formatting = Formatting.Indented; 让 XML 有缩进,另外 Indentation、IndentChar 可以自定义缩进的长度与字符。
writer.WriteStartDocument(); 写 XML 头,如果我们只写 XML 片段,则这里不是必须的。
writer.WriteStartElement("root"); 写根结点。
writer.WriteNode(new XmlTextReader(MyMessage.CompositeXml(), XmlNodeType.Element, null), false); 写入用另一个对象生成的节点。
writer.WriteCData(Writer); 用的是 WriteCData。
获取刚刚生成的 XML 字符串,可用 string xmlString = media.ToString();。
WriteValue、WriteString 会转换 <、> 为 <、>,所以在写入节点时不能用 WriteValue、WriteString,而是用 WriteNode,否则会把节点当作值。另外由于 XmlTextReader 的 ReaderString 读取 <、<等时,不会转换,所以我们在写带有 <、> 的字符串时,最好还是使用 WriteCData。