最近需要用到操作xml文档的方法,学习了一下linq to xml,特此记录。

测试代码:

class Program
{ //参考: LINQ to XML 编程基础 - luckdv - 博客园 http://www.cnblogs.com/luckdv/articles/1728088.html static void Main(string[] args)
{
string path = @"E:\def\5.xml";
//第一种方法 创建
//XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),new XElement("nianhui",new XElement("mingdan",new XText("这里是人名单")),new XElement("jiangxiang",new XText("这里是奖项"))));
//xdoc.Save(path); //第二种方法 创建
//XElement root = new XElement("nianhui",
// new XElement("first", "名单"),
// new XElement("second", "第二项")
// ); //root.Save(path); //修改一个Element
//XElement rootload = XElement.Load(path);
//XElement md = rootload.Element("mingdan");
//if (md != null)
//{
// 替换一个节点
// md.ReplaceWith(new XElement("mingdan", "哈哈哈哈")); //}
//else
//{
// 添加一个节点
// rootload.Add(new XElement("mingdan", "又建了一个"));
//}
//rootload.Save(path); //创建根节点
//XElement root=new XElement("nianhui");
//root.Save(path); //获取Value值
//string x= GetElementValue(path,"mingda");
//Console.WriteLine(x); //删除节点
//DelElement(path, "mingdan"); //XElement root = XElement.Load(Xpath);
//XElement element = root.Element(Xname);
//if (element != null)
//{
// element.Remove();
//}
////保存修改 操作完成后一定要将修改保存回去
//root.Save(Xpath); //为一级节点添加子节点
//XElement root = XElement.Load(path);
//XElement element = root.Element("xing");
//element.Add(new XElement("heihei","what"));
//root.Save(path); //------------带属性的xml---------------------------------------------- //创建带属性的xml节点
//XElement xdoc = new XElement("root", new XElement("first",new XAttribute("ID","001")),new XElement("second","行内的value"));
//xdoc.Save(path); //创建带多个属性的xml节点
//XElement xdoc = new XElement("root",new XElement("first",new XAttribute("name","002"),new XAttribute("path","abc.txt")));
//xdoc.Save(path); //更新某属性的值
//XElement xdoc = XElement.Load(path); //获取某节点元素
//XElement x = xdoc.Element("first");
//string x2 = x.Attribute("path").Value;
//Console.WriteLine(x2); //更新某属性的值
//XElement x3 = xdoc.Element("first");
//if (x3 != null)
//{
// XAttribute a1 = x3.Attribute("path");
// if (a1 != null)
// {
// a1.SetValue("wohuanle");
// }
//}
//xdoc.Save(path); //获取某属性的值 //XElement xdoc = XElement.Load(path);
//XElement x4 = xdoc.Element("first");
//if (x4 != null)
//{
// XAttribute a2 = x4.Attribute("path");
// if (a2 != null)
// {
// Console.WriteLine(a2.Value);
// }
// else
// {
// Console.WriteLine("");
// }
//} //为某节点添加属性
//XElement xdoc = XElement.Load(path);
//XElement x4 = xdoc.Element("first");
//if (x4 != null)
//{
// x4.SetAttributeValue("hah", "what");
//}
//xdoc.Save(path); //修改某节点的属性 如果不存在该属性则添加
//XElement xdoc = XElement.Load(path);
//XElement x4 = xdoc.Element("mingdan");
//if (x4 != null)
//{
// XAttribute attr = x4.Attribute("number");
// if (attr != null)
// {
// //存在该属性
// attr.SetValue("woshixinzengjiade");
// }
// else
// {
// //不存在该属性
// x4.SetAttributeValue("number", "meizhegeshuxing");
// }
//}
//xdoc.Save(path); //尝试获取xml文档中任意一个节点 但测试不成功
//XElement xdoc = XElement.Load(path);
////XElement x4 = xdoc.Element("mingdan"); //IEnumerable<XElement> element = from e in xdoc.Elements()
// where e.Elements().Any(c=>c.Name=="xing")
// select e;
//foreach (XElement it in element)
//{
// Console.WriteLine( it.Value);
//} //为某一级节点添加属性
//Dictionary<string,string> ss=new Dictionary<string,string>();
//ss.Add("na","01");ss.Add("nb","02");
//CreateAttr(path, "heihei",ss); //删除某一级子节点的属性
XElement xdoc = XElement.Load(path);
XElement x4 = xdoc.Element("mingdan");
if (x4 != null)
{
if (x4.Attribute("number") != null)
{
x4.Attribute("number").Remove();
}
}
xdoc.Save(path); Console.ReadKey(); } #region 为某一级节点添加属性
/// <summary>
/// 为某一级节点添加属性
/// </summary>
/// <param name="Xpath">文件路径</param>
/// <param name="Xname">一级节点名称</param>
/// <param name="Attr">属性集</param>
static void CreateAttr(string Xpath, string Xname, Dictionary<string, string> Attr)
{
XElement xdoc = XElement.Load(Xpath);
XElement x4 = xdoc.Element(Xname);
if (x4 != null)
{
foreach (var item in Attr)
{
x4.Add(new XAttribute(item.Key, item.Value));
}
}
xdoc.Save(Xpath);
}
#endregion #region 初始化根节点为Xroot的xml文档
/// <summary>
/// 初始化根节点为Xroot的xml文档
/// </summary>
/// <param name="Xpath"></param>
/// <param name="Xroot"></param>
void InitElement(string Xpath, string Xroot)
{
XElement root = new XElement(Xroot);
root.Save(Xpath);
}
#endregion #region 创建或更新节点
/// <summary>
/// 创建或更新节点
/// </summary>
/// <param name="Xpath"></param>
/// <param name="Xname"></param>
/// <param name="XValue"></param>
void CreateElement(string Xpath, string Xname, string XValue)
{
//加载xml文档路径
XElement root = XElement.Load(Xpath);
//加载某个名称为name的节点
XElement first = root.Element(Xname);
if (first != null)
{
//该名称的节点已存在,替换
first.ReplaceWith(new XElement(Xname, XValue));
}
else
{
//该名称的节点不存在,创建
root.Add(new XElement(Xname, XValue));
}
//不要忘记保存修改
root.Save(Xpath);
}
#endregion #region 获取某节点的Value值
/// <summary>
/// 获取某节点的Value值
/// </summary>
/// <param name="Xpath"></param>
/// <param name="Xname"></param>
/// <returns></returns>
static string GetElementValue(string Xpath, string Xname)
{
XElement root = XElement.Load(Xpath);
XElement element = root.Element(Xname);
if (element != null)
{
return element.Value;
}
else
{
return "";
} }
#endregion #region 删除Name为Xname的子节点
/// <summary>
/// 删除Name为Xname的子节点
/// </summary>
/// <param name="Xpath"></param>
/// <param name="Xname"></param>
static void DelElement(string Xpath, string Xname)
{
XElement root = XElement.Load(Xpath);
XElement element = root.Element(Xname);
if (element != null)
{
element.Remove();
}
//保存修改
root.Save(Xpath);
}
#endregion }

2014-1-10 10:08:37 新增加一个:

        /// <summary>
/// 创建或添加一级节点(1个或多个)
/// </summary>
/// <param name="Xpath"></param>
/// <param name="Xelement"></param>
static void AddElement(string Xpath, Dictionary<string, string> Xelement)
{
//加载xml文档路径
XElement root = XElement.Load(Xpath);
foreach (var e in Xelement)
{
//判断当前一级节点是否存在,若存在,则重新设置值,若不存在,则添加
XElement first = root.Element(e.Key);
if (first != null)
{
first.SetValue(e.Value);
}
else
{
root.SetElementValue(e.Key, e.Value);
}
}
root.Save(Xpath);
}

参考: LINQ to XML 编程基础 - luckdv - 博客园  http://www.cnblogs.com/luckdv/articles/1728088.html

转载请注明出处。

[开发笔记]-Linq to xml学习笔记的更多相关文章

  1. LINQ to XML学习笔记

    一.XML基础知识 1.XML:可扩展标记语言 Extensible Markup Language ,提供了一种保存数据的格式,数据可以通过这种格式很容易地在不同的应用程序之间实现共享. 2.使用X ...

  2. delphi操作xml学习笔记 之一 入门必读

    Delphi 对XML的支持---TXMLDocument类       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...

  3. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  4. XML学习笔记

    XML学习笔记 第一部分:XML简介 我们经常可以听到XML.HTML.XHTML这些语言,后两者比较清楚,一直不是很明白XML是什么,这里做一个总结. XML(eXtensible Markup L ...

  5. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  6. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  7. 【神经网络与深度学习】学习笔记:AlexNet&Imagenet学习笔记

    学习笔记:AlexNet&Imagenet学习笔记 ImageNet(http://www.image-net.org)是李菲菲组的图像库,和WordNet 可以结合使用 (毕业于Caltec ...

  8. Linq学习笔记---Linq to Xml操作

    LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元素集合  FirstAttribut ...

  9. XML学习笔记之XML的简介

    最近,自学了一段时间xml,希望通过学习笔记的整理能够巩固一下知识点,也希望把知识分享给你们(描红字段为重点): XML(extensible Markup language):可扩展的标记语言,解决 ...

随机推荐

  1. ASP.NET项目在IIS上使用虚拟目录

    在IIS中,应用程序与虚拟目录特别容易混淆,但两者又是完全不同的概念. 应用程序是一个逻辑边界,这个边界可以分隔网站及其组成部分.虚拟目录则是一个真实的指针,这个指针指向了一个本地或远程的物理路径.虚 ...

  2. Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应

    杂家前文Android颜色对照表只有颜色和十六进制,有时候需要设置r g b分量的int值,如paint.setARGB(255, 127, 255, 212);就需要自己计算下分量的各个值.这里提供 ...

  3. 如何使用 t-sql 更新数据库中日期字段的部分数据(年?月?日?时?分?秒?)

    嗯,从网上找到了一些内容,综合利用了sql server的一些内置方法 首先是 convert 方法:https://msdn.microsoft.com/zh-cn/library/ms187928 ...

  4. 一个里表世界切换的shader效果

    之前GGJ实现了一个,但是实现方式上有很多冗余.今天正好在做一个类似的东西,重新做了一个版本 还是当时美术画的素材: 由于里表世界是不同的内容,是两张材质.所以拆分成不同Layer之后,里世界单独渲染 ...

  5. Atitit 转移特效attilax总结

    Atitit 转移特效attilax总结 总结一般从按钮,转移到大点的方框上回比较好看点.. <!--jq ui--> <style type="text/css" ...

  6. 用Duplex实现消息广播

    WCF中定义3种消息交换模式: 1. Request/Reply; 2. One-Way; 3. Duplex.  Request/Reply 是缺省模式,即同步调用.在调用服务方法后需要等待服务的消 ...

  7. 【Unity】8.2 GUI Style和GUISkin

    分类:Unity.C#.VS2015 创建日期:2016-04-27 一.自定义GUI Control 功能控件 (Functional Control) 是游戏必要的,而这些控件的外观对游戏的美感非 ...

  8. zabbix server 在配置客户端的时候 在zabbix server端的/etc/hosts文件的hostname 对应的ip这样可以更快的让server端发现agent端

    如下: # cat /etc/hosts 127.0.0.1 localhost.localdomain localhost.localdomain localhost4 localhost4.loc ...

  9. 菜鸟学Java(八)——dom4j详解之读取XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  10. Flink安装、高可用性

    Flink JobManager HA模式部署(基于Standalone) SCP 命令 SSH免密码登录,搭建Flink standalone集群 https://blog.csdn.net/jie ...