zoukankan      html  css  js  c++  java
  • 使用XmlWriter写Xml

    假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml

    1.如何使用XmlWriter写Xml文档声明

    // WriteStartDocument方法可以接受一个bool参数(表示standalone,是否为独立文档)或者不指定参数standalone保持默认值
    xmlWriter.WriteStartDocument(false|true);

    注意在使用WriteStartDocument方法后最好调用xmlWrite.WriteEndDocument()方法来关闭所有可能未关闭标签
    2.如何使用XmlWriter写xml节点以及属性

    //写节点
    xmlWriter.WriteStartElement("cat");
    //给节点添加属性
    xmlWriter.WriteAttributeString("color", "white");
    //给节点内部添加文本
    xmlWriter.WriteString("I'm a cat");
    xmlWriter.WriteEndElement();

    或者通过WriteElementString(string,string)方法写xml节点同时写下节点值,如下

    //通过WriteElementString可以添加一个节点同时添加节点内容
    xmlWriter.WriteElementString("pig", "pig is great");

    3.如何写CData

    xmlWriter.WriteStartElement("dog");
    //写CData
    xmlWriter.WriteCData("<strong>dog is dog</strong>");
    xmlWriter.WriteEndElement();

    4.如何使用XmlWriter添加注释

    xmlWriter.WriteComment("this is an example writed by 玉开技术博客 http://www.cnblogs.com/yukaizhao ");

    5.如何设置XmlWriter的输出格式,解决输出UTF-16问题
    设置xml输出格式,需要通过XmlWriterSettings类,如下代码

    XmlWriterSettings settings = new XmlWriterSettings();
    //要求缩进
    settings.Indent = true;
    //注意如果不设置encoding默认将输出utf-16
    //注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容
    settings.Encoding = new UTF8Encoding(false);
                     
    //设置换行符
    settings.NewLineChars = Environment.NewLine;

    完整的代码示例如下:

    /*玉开技术博客 http://www.cnblogs.com/yukaizhao */
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Xml;
     
    namespace UseXmlWriter
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    XmlWriterSettings settings = new XmlWriterSettings();
                    //要求缩进
                    settings.Indent = true;
                    //注意如果不设置encoding默认将输出utf-16
                    //注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容
                    settings.Encoding = new UTF8Encoding(false);
                     
                    //设置换行符
                    settings.NewLineChars = Environment.NewLine;
     
                    using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings))
                    {
     
                        //写xml文件开始<?xml version="1.0" encoding="utf-8" ?>
                        xmlWriter.WriteStartDocument(false);
                        //写根节点
                        xmlWriter.WriteStartElement("root");
                        //写字节点
                        xmlWriter.WriteStartElement("cat");
                        //给节点添加属性
                        xmlWriter.WriteAttributeString("color", "white");
                        //给节点内部添加文本
                        xmlWriter.WriteString("I'm a cat");
                        xmlWriter.WriteEndElement();
     
     
                        //通过WriteElementString可以添加一个节点同时添加节点内容
                        xmlWriter.WriteElementString("pig", "pig is great");
     
     
                        xmlWriter.WriteStartElement("dog");
                        //写CData
                        xmlWriter.WriteCData("<strong>dog is dog</strong>");
                        xmlWriter.WriteEndElement();
     
                        xmlWriter.WriteComment("this is an example writed by 玉开技术博客 http://www.cnblogs.com/yukaizhao ");
     
                        xmlWriter.WriteEndElement();
                        xmlWriter.WriteEndDocument();
     
                    }
     
                    //将xml内容输出到控制台中
                    string xml = Encoding.UTF8.GetString(ms.ToArray());
                    Console.WriteLine(xml);
                }
                Console.Read();
     
            }
        }
    }
  • 相关阅读:
    Windows 认证小结
    Linux 提权学习小结
    ssrf与gopher与redis
    hacker101 CTF 学习记录(二)
    Hacker101 CTF 学习记录(一)
    libwebsockets支持外部eventloop变更
    ypipe, zmq的核心部件,并行读写的管道。
    std::regex与boost::regex的性能差5倍,有profile有真相。
    Spring整合WebSocket
    温故知新——Spring AOP(二)
  • 原文地址:https://www.cnblogs.com/yangkai-cn/p/4017217.html
Copyright © 2011-2022 走看看