案例1:获取指定节点的内容

 public void XmlTest()
{
string xmlFileName=AppDomain.CurrentDomain.BaseDirectory+"\\book.xml";
if (File.Exists(xmlFileName))
{
XmlReader xmlReader = XmlReader.Create(xmlFileName);
while (!xmlReader.EOF) //判断是否是流结尾
{
if (xmlReader.MoveToContent() == XmlNodeType.Element && xmlReader.Name == "title") //MoveToContent()检测是否是内容节点,如果不是则后移下一个节点。 XmlNodeType.Element表示特征类型,特性(例如,id='123')。
{
Console.WriteLine(xmlReader.ReadElementString());//获取当前节点的内容
}
else
{
xmlReader.Read(); //Read()方法:循环下一个节点
}
}
}
}

案例2:获取数据后数据转换使用ReadElementContentAsInt()、ReadElementContentAsDateTime()、ReadElementContentAsDouble()等方法,这样比先获取该值字符串再转换成其他数据类型的方法效率较高。

案例3:写入xml文件(会覆盖)

 public void XmlWriteTest()
{
string xmlFileName = AppDomain.CurrentDomain.BaseDirectory + "\\newBook.xml";
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true; //是否缩进
settings.NewLineOnAttributes = true; //是否将属性写入新行
XmlWriter writer = XmlWriter.Create(xmlFileName, settings); //静态方法实例化XmlWriter对象. XmlWriter会用新文件覆盖已有文件
writer.WriteStartDocument(); //声明xml为1.0的版本号
writer.WriteComment("这是一个注释"); //插入注释
writer.WriteStartElement("book"); //父节点名称
writer.WriteAttributeString("title", "New China"); //父节点的特征
writer.WriteAttributeString("author", "heyaoxing"); //父节点的特征
writer.WriteElementString("what", "I don't konw!"); //父节点的特征
writer.WriteStartElement("begin"); //子节点
writer.WriteElementString("beginItem", "asdasd"); //子节点下的内容节点和内容
writer.WriteEndElement(); //子节点的结束标签
writer.WriteElementString("name","234sdf"); //父节点的内容标签和内容
writer.WriteEndElement(); //父节点结束标签
writer.WriteEndDocument(); //声明结束文档
writer.Flush(); //将缓存数据写入流,同时清除当前缓存缓存数据
writer.Dispose(); //清除 witer对象
}

案例4:DataSet数据转换成Xml数据

public void DataSetToXmlTest()
{
string xmlFileName = AppDomain.CurrentDomain.BaseDirectory + "\\book.xml";
string connecString = @"Data Source=(local);Initial Catalog=TestWeb1;User ID=ca;Password=123456";
string sqlString="SELECT TOP 1000 [USR_ID],[FAMILY_ID],[NAME],[RELATION] FROM [TestWeb1].[dbo].[USERS_FAMILY]";
using (SqlConnection con = new SqlConnection(connecString))
{
SqlDataAdapter da = new SqlDataAdapter(sqlString, con);
DataSet ds = new DataSet("USERS_FAMILY");
da.Fill(ds,"USERS_FAMILY");
ds.WriteXml(xmlFileName, XmlWriteMode.WriteSchema); //将当前内容以xml形式写入DataSet
XmlDataDocument doc = new XmlDataDocument(ds); //将当前DataSet写入到Xml
ds.Dispose();
da.Dispose();
}
}

案例5:序列化和反序列化

public void XmlSerTest()
{
Project project = new Project();
project.name = "yaoxing";
project.age = ;
project.sex = "男";
project.address = "珠海市";
//序列化操作
TextWriter textWriter = new StreamWriter("project.xml"); //创建写入流对象
XmlSerializer sr = new XmlSerializer(typeof(Project)); //实例化XmlSerializer,同时XmlSerializer需要知道序列号的对象
sr.Serialize(textWriter, project); //执行序列化操作
textWriter.Dispose(); //反序列化
FileStream file = new FileStream("project.xml", FileMode.Open); //创建文件对象
XmlSerializer xsr = new XmlSerializer(typeof(Project));
Project pro = (Project)xsr.Deserialize(file); //执行反序列化操作
Console.WriteLine(pro.name);
Console.WriteLine(pro.age);
Console.WriteLine(pro.sex);
Console.WriteLine(pro.address);
}

案例6:XML To Linq

 public void LinqToXmlTest()
{
string xmlFileName = AppDomain.CurrentDomain.BaseDirectory + "project.xml";
if (File.Exists(xmlFileName))
{
XDocument xdoc = XDocument.Load(xmlFileName); //加载指定xml文件
Console.WriteLine("" + xdoc.LastNode.ToString()); //获取最后一个子节点的值
//Linq查询xml文档
var name = from a in xdoc.Descendants("name") //使用Linq查询方式1
select a.Value; Console.WriteLine(xdoc.Element("Project").Element("age").Value); //使用Linq查询方式2
Console.WriteLine(name.Count());
foreach (var item in name)
{
Console.WriteLine(item);
}
} XDocument xd = new XDocument();
XComment xc = new XComment("这是一条注释");
xd.Add(xc); //插入注释
XNamespace ns = "http://www.baidu.com/"; //定义命名空间
XElement xl = new XElement(ns + "company", //定义节点
new XAttribute("key","num1"), //定义特性
new XElement("partMent", //定义节点
new XElement("name", "online") //定义节点
),
new XComment("中间插入一条注释"), //插入注释
new XElement("sunlike", "name"), //定义节点
new XElement("sunlike", "name"), //定义节点
new XElement("sunlike", "name"), //定义节点
new XElement("sunlike", "name") //定义节点
);
xd.Add(xl); //定义节点载入文件
xd.Save("company.xml"); //保存xml
}

操作xml练习的更多相关文章

  1. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  2. php中通过DOM操作XML

    DOM文档在js里早就接触过,知道DOM不但可以操作html文档,还可以操作XHTML,XML等文档,有着极强的通用性,下面我们通过两个小例子,看看在PHP中是如何用DOM操作XML文档的,和js中差 ...

  3. 使用dom4j操作XML

    DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...

  4. 使用JDOM操作XML

    JDOM介绍 JDOM是使用Java语言编写的,用于读写及操作XML的一套组件,Jdom同时具有DOM修改文件的优点和SAX读取快速的优点. JDOM的使用 首先下载JDOM的JAR包,本文使用的是j ...

  5. php : DOM 操作 XML

    DOM 操作 XML 基本用法 XML文件: person.XML <?xml version="1.0" encoding="utf-8" ?> ...

  6. Strus2第一次课:dom4j操作xml

    先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; ...

  7. .NET 操作XML

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...

  8. php操作xml

    最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星期的基本语法后做些小练习热热身,但是期间是各种问题啊,主要是对php不熟悉, ...

  9. JavaScript操作XML

    JavaScript操作XML (一) JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准 ...

  10. C#操作XML方法集合

    一 前言 先来了解下操作XML所涉及到的几个类及之间的关系  如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家 * 1 XMLElement 主要是针对节点的一些属性进行操 ...

随机推荐

  1. Delphi 调用C/C++的Dll(stdcall关键字, 会导致函数名分裂. 此时函数名变成_stdadd@8)

    delphi调用C++写的Dll, 当然这个Dll要求是非MFC的Dll, 这样子才能被delphi调用. 根据C++定义函数的情况, Delphi有不同的相对应的处理方法.1. 声明中不加__std ...

  2. WPF最大化避免覆盖任务栏

    原文:WPF最大化避免覆盖任务栏 WPF当窗体WindowStyle=”None”时,最大化会覆盖掉任务栏.如何解决这个问题呢? 我在Google里面搜到一篇文章,要用到Win32 API,通过让WP ...

  3. WPF属性(一)依赖属性

    原文:WPF属性(一)依赖属性 依赖属性是一种可以自己没有值,并能通过使用Binding从数据源获得值的属性,拥有依赖属性的对象称为依赖对象,在传统开发中,一个对象所占用的内存在调用new操作符进行实 ...

  4. windows下捕获dump之Google breakpad_client

    breakpad是Google开源的一套跨平台工具,用于dump的处理.很全的一套东西,我这里只简单涉及breakpad客户端,不涉及纯文本符号生成,不涉及dump解析. 一.使用 最简单的是使用进程 ...

  5. 微信小程序把玩(十六)form组件

    原文:微信小程序把玩(十六)form组件 form表单组件 是提交form内的所有选中属性的值,注意每个form表单内的组件都必须有name属性指定否则提交不上去,button中的type两个subm ...

  6. [转载]关于Java reference的一篇博文

    不再额外的叨叨了,直接附上原地址: https://community.oracle.com/people/enicholas/blog/2006/05/04/understanding-weak-r ...

  7. Windows Vista 的历史地位

    Windows Vista,这是一个不那么如雷贯耳的Windows名字,很多人甚至从来没有体验过这个操作系统.但是,Windows Vista刚刚推出时候所引起的话题性,恐怕是其后的Win7也难以与之 ...

  8. Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器。

    Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器. Long Shadows Generate 彩蛋爆料直击现场 Long Shadow ...

  9. 深入解析Windows窗口创建和消息分发(三个核心问题:怎么将不同的窗口过程勾到一起,将不同的hwnd消息分发给对应的CWnd类去处理,CWnd如何简单有效的去处理消息,由浅入深,非常清楚) good

    笔记:争取不用看下面的内容,只看自己的笔记,就能记住这个流程,就算明白了: _tWinMain-->AfxWinMain,它调用四个函数: -->AfxWinInit用于做一些框架的初始化 ...

  10. c# winfrom 可折叠的树形控件

    首先需要一个可绑定实体 [Serializable] public class TreeNodeModel { private Image _nodePic; /// <summary> ...