using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml; namespace XmlTest
{
class Program
{
//第一种方案 xml数据流顺序,这个很重要,如果使用数据流的方式就需要对这种格式严格的理解,使用DOC方式的话,就无所谓了
static void ReadOrder()
{
XmlReaderSettings settings = new XmlReaderSettings(); // 控制解析和验证过程
settings.IgnoreWhitespace = true; // 忽略空白区域
settings.IgnoreComments = true; // 忽略注释
settings.ConformanceLevel = ConformanceLevel.Document; // 是否只具有一个根节点 using (XmlReader reader = XmlReader.Create("Sample.xml", settings)) //打开文件
{
while (reader.Read()) //xml流单位为XMNL节点并且是单向的,每次调用read()都会使节点指向下一个位置,如果为false表示文件结束
{
Console.WriteLine(new string(' ', reader.Depth * )); //深度
Console.WriteLine(reader.NodeType); //节点类型,参考XmlNodeType结构, switch (reader.NodeType)
{
case XmlNodeType.Element: //元素(例如,<item>)。
case XmlNodeType.EndElement: //末尾元素标记(例如,</item>)。
Console.WriteLine(reader.Name);
break; case XmlNodeType.Text: //节点的文本内容。
case XmlNodeType.Comment: //注释(例如,<!-- my comment -->)。
case XmlNodeType.Attribute: //属性
Console.WriteLine(reader.Value);
break;
} Console.WriteLine("================================");
}
}
} static void readtest()
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true; using (XmlReader reader = XmlReader.Create("Sample.xml", settings))
{
string str = "";
//检查当前节点是否是内容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)节点,如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。 它跳过以下类型的节点:ProcessingInstruction、DocumentType、Comment、Whitespace 或 SignificantWhitespace。
reader.MoveToContent(); //检查当前内容节点是否为具有给定 System.Xml.XmlReader.Name 的元素并将读取器推进到下一个节点。
reader.ReadStartElement("OpenNI");
Console.WriteLine(reader["id"]); //当在派生类中被重写时,移动到具有指定 System.Xml.XmlReader.Name 的属性。
reader.MoveToAttribute("name");
//将当前位置的文本内容作为 System.String 对象读取。
Console.WriteLine(reader.ReadContentAsString()); reader.MoveToAttribute("id");
Console.WriteLine(reader.ReadContentAsString()); //读取属性后,节点位于Attribute,通过查看NoteType可以进行如下方式进行处理: //第一种方式:
//reader.ReadStartElement();
//str = reader.ReadElementContentAsString("price", "");
//Console.WriteLine(str);
//reader.ReadEndElement(); //第二种方式: //当在派生类中被重写时,移动到包含当前属性节点的元素。
reader.MoveToElement();
str = reader.ReadElementContentAsString("title", "");
Console.WriteLine(str); reader.ReadStartElement("Licenses");
//检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 System.String
str = reader.ReadElementContentAsString("price", "");
Console.WriteLine(str);
reader.ReadEndElement(); reader.ReadEndElement();
}
} static void writetest(string filename)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = false; using (XmlWriter writer = XmlWriter.Create(filename, settings))
{
//起始元素
writer.WriteStartElement("book"); //写属性
writer.WriteAttributeString("name","the art of code");
writer.WriteAttributeString("time", DateTime.Now.ToString()); //节点1
writer.WriteElementString("name","the art of code"); //节点2
writer.WriteStartElement("time");
writer.WriteValue(DateTime.Now);
writer.WriteEndElement(); //结束“book”节点
writer.WriteEndElement(); }
} //==========================================================第二种方案
static void WriteXmlDoc(String filename)
{
XmlDocument xml = new XmlDocument(); //添加声明
XmlDeclaration xmldecl = xml.CreateXmlDeclaration("1.0", "gb2312", null);
xml.AppendChild(xmldecl); //创建根节点
XmlElement root = xml.CreateElement("root");
xml.AppendChild(root); //创建属性
XmlAttribute id = xml.CreateAttribute("id");
id.Value = "";
//创建时间属性
XmlAttribute time = xml.CreateAttribute("time");
time.Value = DateTime.Now.ToString(); //创建元素
XmlElement name = xml.CreateElement("name");
name.AppendChild(xml.CreateTextNode("the art of code"));
XmlElement author = xml.CreateElement("author");
author.AppendChild(xml.CreateTextNode("s.b")); XmlElement book = xml.CreateElement("book");
book.AppendChild(name);
book.AppendChild(author); //根节点添加属性
root.Attributes.Append(id);
root.Attributes.Append(time);
//设置属性
root.SetAttribute("num", ""); //跟节点添加子节点
root.AppendChild(book); xml.Save(filename);
} static void ReadXmlDoc(string filename)
{
XmlDocument xml = new XmlDocument();
xml.Load(filename); //获得属性
Console.WriteLine(xml.DocumentElement.Attributes["time"].Value); //遍历子节点
if (xml.DocumentElement.HasChildNodes)
{
XmlNodeList list = xml.DocumentElement.ChildNodes; foreach (XmlNode it in list)
{
Console.WriteLine(it.InnerXml);
}
}
} static void Main(string[] args)
{
//ReadOrder();
// readtest(); // writetest("test.xml"); WriteXmlDoc("doc.xml");
ReadXmlDoc("doc.xml");
Console.Read();
}
}
}
细雨标记: 细雨淅淅

C# Xml文件操作,解释见注释的更多相关文章

  1. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  2. C# XML文件操作

    C# XML文件操作 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-09 参考 LINQ to XML System.Xml ...

  3. PHP对XML文件操作之属性与方法讲解

    DOMDocument相关的内容. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definit ...

  4. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  5. XML文件操作类--创建XML文件

    这个类是在微软XML操作类库上进行的封装,只是为了更加简单使用,包括XML类创建节点的示例. using System; using System.Collections; using System. ...

  6. SpringBatch Sample (三)(XML文件操作)

    前篇关于Spring Batch的文章,讲述了Spring Batch 对CSV文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对XML文件的读写操作.实例流程是 ...

  7. XML文件操作之dom4j

    能够操作xml的api还是挺多的,DOM也是可以的,不过在此记录下dom4j的使用,感觉确实挺方便的 所需jar包官网地址:http://www.dom4j.org/dom4j-1.6.1/ dom4 ...

  8. C#XML文件操作随笔

    以为公司一直没有电源屏厂家协议解析为DevVars相关的软件,手写费时费力还容易出错,用了2天时间做了一个.txt协议文件筛选加并解析成xml文件的工具,总结一下用到的几个知识点 1.LINQ 是一个 ...

  9. Xml文件操作的其中一个使用方法:

    XmlNodeList students = doc.DocumentElement.ChildNodes;//Student节点集合 foreach (XmlNode stu in students ...

  10. XML文件操作(C#)

    XML应用于Web开发的许多方面,常用于简化数据的存储和共享,它的设计宗旨是传输数据,而非显示数据.下面简单介绍一下C#是如何对XML文件进行读取的. 1.首先,建立XML对象并关联XML文件 str ...

随机推荐

  1. java基础知识回顾之javaIO类总结

    java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...

  2. oracle 10g 学习之数据进行增删改查、数据库事务、约束(8)

    目标 通过本章学习,您将可以: l  使用 DML 语句 l  向表中插入数据 l  更新表中数据 l  从表中删除数据 l  控制事务 l  描述约束 l  创建和维护约束 数据控制语言 l     ...

  3. PHP多文件上传类

    <?php class Upload{ var $saveName;// 保存名 var $savePath;// 保存路径 var $fileFormat = array('gif','jpg ...

  4. hdu 5284 BestCoder Round #48 ($) 1001 水题 *

    题意:看一个字符串中是否包含顺序的  w  y  h ,字符之间可以有其他字符,并且如果有多个连续的vv,则可以看做一个w 比较水,直接看代码 #include<cstdio> #incl ...

  5. C++程序设计课程学习的网址

    很详细 C++程序设计课程主页  http://blog.csdn.net/sxhelijian/article/details/7910565 孙鑫C++视频教程 rmvb格式 全20CD完整版  ...

  6. codevs 2924 数独

     数独挑战 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codevs.cn/problem/2924/ Description “芬兰数学家因 ...

  7. Android 返回键双击退出程序

    /** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == K ...

  8. hud1166 敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. 构造 hihocoder 1257 Snake Carpet (15北京I)

    题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...

  10. 关于Java的数据结构HashMap,ArrayList的使用总结及使用场景和原理分析

    使用,必须要知道其原理,在课堂上学过散列函数的用法及其原理.但一直不知道怎么实践. 后来,在实际项目中,需要做一个流量分析预处理程序.每5分钟会接收到现网抓来的数据包并解析,每个文本文件大概200M左 ...