这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战
之前介绍了使用 XmlDocument读写xml的操作,接着XmlDocument获取XML 使用XmlWriter 将xml写入后获取文本,我们再来看一看XmlWriter 如何读写XML。
XmlWriter 类
表示一个写入器,该写入器提供一种快速、非缓存和只进方式以生成包含 XML 数据的流或文件。 使用XmlWriter可以:
- 检查字符是不是合法的 XML 字符,元素和属性的名称是不是有效的 XML 名称。
- 检查 XML 文档的格式是否正确。
- 将二进制字节编码为 Base64 或 BinHex,并写出结果文本。
- 使用公共语言运行时类型而不是字符串传递值,以避免必须手动执行值转换。
- 将多个文档写入一个输出流。
- 写出有效的名称、限定名和名称标记。
XmlWriter 示例
我们还是以上一篇的xml结构文档为例演示如何写xml文档。
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>
复制代码
首先创建XmlWriter对象,由于XmlWriter是数据流,所以我们还要关闭XmlWriter数据流。
创建对象需要我们使用XmlWriterSettings来进行设置,可以设置xml的编码格式,默认是utf-16,我们设置utf-8。然后设置换行符号,使用MemoryStream来存储写入的数据, XmlWriter.Create(ms, settings)创建。 WriteStartElement
方法写节点开始。
WriteEndElement
写节点结束。
WriteElementString
写入整个元素节点,包括字符串值。
WriteAttributeString
写入整个属性节点,包括字符串值。
XmlWriter xmlWriter = null;
XmlWriterSettings settings = new XmlWriterSettings();
//要求缩进
settings.Indent = true;
//设置encoding utf-8,默认将输出utf-16
settings.Encoding = new UTF8Encoding(false);
//设置换行符
settings.NewLineChars = Environment.NewLine;
MemoryStream ms = new MemoryStream();
try
{
xmlWriter = XmlWriter.Create(ms, settings);
xmlWriter.WriteStartDocument();
//books 开始
xmlWriter.WriteStartElement("books");
//book 开始
xmlWriter.WriteStartElement("book");
xmlWriter.WriteElementString("author","Carson");
xmlWriter.WriteElementString("price", "19.95");
writer.WriteAttributeString("format", "dollar");
xmlWriter.WriteElementString("pubdate", "05/01/2001");
//book 结束
xmlWriter.WriteEndElement();
//pubinfo 开始
xmlWriter.WriteStartElement("pubinfo");
xmlWriter.WriteElementString("publisher","MSPress");
xmlWriter.WriteElementString("state","WA");
//pubinfo 结束
xmlWriter.WriteEndElement();
//books 结束
xmlWriter.WriteEndElement();
}
finally
{
if (xmlWriter != null)
xmlWriter.Close();
ms.Close();
}
string xmlStr=Encoding.UTF8.GetString(ms.ToArray());
复制代码
通过XmlWriter的展示我们就写入了xml文档并且可以直接获取xml文本使用。还有些添加注释,命名空间等等方法都是类似的。