C# XmlWriter 读写xml

这是我参与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文本使用。还有些添加注释,命名空间等等方法都是类似的。

猜你喜欢

转载自juejin.im/post/7034877883164131365