.net与XML之"写"——"XmlTextWriter"
详细看代码注释
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace XMLConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//XmlTextWriter writer = new XmlTextWriter("E://mywriter.xml",null);
//第二个参数为空,如上面那行,则生成的xml文件中声明为<?xml version="1.0" ?>
XmlTextWriter writer = new XmlTextWriter("E://mywriter.xml", Encoding.GetEncoding("GB2312"));
//设置缩进
writer.Formatting = Formatting.Indented;
//编写XML声明部分,如<?xml version = "1.0" encoding = "UTF-8"?>
writer.WriteStartDocument();
//写指定的其实的标记
//WriteStartElement(string localname)使用传递的子都串作为元素的本地名称
//WriteStartElement(string localname,string namespace)第一个参数为元素的本地名称,第二个元素的命名空间
//WriteStartElement(string prefix,string localname,string namespace)第一个位元素的前缀,后同上
//WriteEndElement用来结束标记,如果元素不包含任何内容,用"/>"作为结束标记
writer.WriteStartElement("Mylxr");
writer.WriteStartElement("lxr");
//WriteStartAttribute()编写一个属性的开头
//WriteStartAttribute(string localname)属性的本地名称
//WriteStartAttribute(string localname,string namespace)属性的本地名称,第二个参数属性所在的命名空间
//WriteStartAttribute(string prefix,string localname,string namespace)
//WriteEndAttribute()关闭属性
writer.WriteStartAttribute("ID");
//WriteString(string text)写出文本
writer.WriteString("1");
//writer.WriteAttributeString()添加属性,如果属性的之中不包含实体,可直接使用该方法,否则可以使用WriteStartAttribute()和WriteEndAttribute()
//writer.WriteAttributeString(string localname,string value)
//writer.WriteAttributeString(string localname,string namespace,string value);
//writer.WriteAttributeString(string prefix,string localname,string namespace,string value)
writer.WriteAttributeString("sex", "F");
//writer.WriteElementString()创建一个包含字符串值的元素
//writer.WriteElementString(string localname,string value)
//writer.WriteElementString("name","jim");输出<name>jim</name>
//writer.WriteElementString(string localname,string namespace,string value);
//writer.WriteElementString("name","http://www.w3.org%22,%22john/");输出<name xmlns="http://w3.org%22%3ejohn%3c/name>
//writer.WriteElementString(string prefix,string localname,string namespace,string value)
//如果编写嵌套元素可以使用WriteStartElement()和WriteEndElement();
//如果编写直接包含内容的元素则可以使用WriteElementString()
//写元素的方式一
writer.WriteStartElement("name");
writer.WriteString("Jim");
writer.WriteEndElement();
//写元素的方式二
writer.WriteElementString("category", "Friend");
//关闭元素Item
writer.WriteEndElement();
//写空行,可要可不要
writer.WriteWhitespace("\n");
//writer.WriteComment(string text);添加注释<!-- text -->
writer.WriteComment("这是注释,测试使用");
//writer.WriteCData(string text)生成<![CDATA[text]]>
writer.WriteCData("测试使用");
//从字符串手动编写标记
writer.WriteRaw(" \n <lxr ID=\"2\" sex = \"M\">\n" +
" <name>John</name>\n" +
" <category>Family</category>" +
"\n </lxr>\n");
writer.WriteWhitespace("\n");
//关闭元素
writer.WriteFullEndElement();
//WriteFullEndElement与WriteEndElement都是结束标签,区别是
//WriteFullEndElement关闭元素,并且总是写入“完整”的结束标记
//如
//writer.WriteStartElement("name");
//writer.WriteEndElement();
//生成<name />
//writer.WriteStartElement("name");
//writer.WriteFullEndElement();
// 生成<name></name>
//当元素值为空时有区分,不为空没有区别
//关闭
writer.Close();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace XMLConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//XmlTextWriter writer = new XmlTextWriter("E://mywriter.xml",null);
//第二个参数为空,如上面那行,则生成的xml文件中声明为<?xml version="1.0" ?>
XmlTextWriter writer = new XmlTextWriter("E://mywriter.xml", Encoding.GetEncoding("GB2312"));
//设置缩进
writer.Formatting = Formatting.Indented;
//编写XML声明部分,如<?xml version = "1.0" encoding = "UTF-8"?>
writer.WriteStartDocument();
//写指定的其实的标记
//WriteStartElement(string localname)使用传递的子都串作为元素的本地名称
//WriteStartElement(string localname,string namespace)第一个参数为元素的本地名称,第二个元素的命名空间
//WriteStartElement(string prefix,string localname,string namespace)第一个位元素的前缀,后同上
//WriteEndElement用来结束标记,如果元素不包含任何内容,用"/>"作为结束标记
writer.WriteStartElement("Mylxr");
writer.WriteStartElement("lxr");
//WriteStartAttribute()编写一个属性的开头
//WriteStartAttribute(string localname)属性的本地名称
//WriteStartAttribute(string localname,string namespace)属性的本地名称,第二个参数属性所在的命名空间
//WriteStartAttribute(string prefix,string localname,string namespace)
//WriteEndAttribute()关闭属性
writer.WriteStartAttribute("ID");
//WriteString(string text)写出文本
writer.WriteString("1");
//writer.WriteAttributeString()添加属性,如果属性的之中不包含实体,可直接使用该方法,否则可以使用WriteStartAttribute()和WriteEndAttribute()
//writer.WriteAttributeString(string localname,string value)
//writer.WriteAttributeString(string localname,string namespace,string value);
//writer.WriteAttributeString(string prefix,string localname,string namespace,string value)
writer.WriteAttributeString("sex", "F");
//writer.WriteElementString()创建一个包含字符串值的元素
//writer.WriteElementString(string localname,string value)
//writer.WriteElementString("name","jim");输出<name>jim</name>
//writer.WriteElementString(string localname,string namespace,string value);
//writer.WriteElementString("name","http://www.w3.org%22,%22john/");输出<name xmlns="http://w3.org%22%3ejohn%3c/name>
//writer.WriteElementString(string prefix,string localname,string namespace,string value)
//如果编写嵌套元素可以使用WriteStartElement()和WriteEndElement();
//如果编写直接包含内容的元素则可以使用WriteElementString()
//写元素的方式一
writer.WriteStartElement("name");
writer.WriteString("Jim");
writer.WriteEndElement();
//写元素的方式二
writer.WriteElementString("category", "Friend");
//关闭元素Item
writer.WriteEndElement();
//写空行,可要可不要
writer.WriteWhitespace("\n");
//writer.WriteComment(string text);添加注释<!-- text -->
writer.WriteComment("这是注释,测试使用");
//writer.WriteCData(string text)生成<![CDATA[text]]>
writer.WriteCData("测试使用");
//从字符串手动编写标记
writer.WriteRaw(" \n <lxr ID=\"2\" sex = \"M\">\n" +
" <name>John</name>\n" +
" <category>Family</category>" +
"\n </lxr>\n");
writer.WriteWhitespace("\n");
//关闭元素
writer.WriteFullEndElement();
//WriteFullEndElement与WriteEndElement都是结束标签,区别是
//WriteFullEndElement关闭元素,并且总是写入“完整”的结束标记
//如
//writer.WriteStartElement("name");
//writer.WriteEndElement();
//生成<name />
//writer.WriteStartElement("name");
//writer.WriteFullEndElement();
// 生成<name></name>
//当元素值为空时有区分,不为空没有区别
//关闭
writer.Close();
}
}
}
得说下这个,
Code
//WriteFullEndElement与WriteEndElement都是结束标签,区别是
//WriteFullEndElement关闭元素,并且总是写入“完整”的结束标记
//如
//writer.WriteStartElement("name");
//writer.WriteEndElement();
//生成<name />
//writer.WriteStartElement("name");
//writer.WriteFullEndElement();
// 生成<name></name>
//当元素值为空时有区分,不为空没有区别
//WriteFullEndElement与WriteEndElement都是结束标签,区别是
//WriteFullEndElement关闭元素,并且总是写入“完整”的结束标记
//如
//writer.WriteStartElement("name");
//writer.WriteEndElement();
//生成<name />
//writer.WriteStartElement("name");
//writer.WriteFullEndElement();
// 生成<name></name>
//当元素值为空时有区分,不为空没有区别
但是我发现没有类似“追加”功能的函数,比方说我要向现有的xml文件中写一个节点,总不能先把整个文件读取,然后在内存中修改,之后再写入,这样虽然是中解决办法,但如果这个xml很大呢?是不是太浪费资源了呢?
不过有其他的方法解决