[开发笔记]-Linq to xml学习笔记

简介:

最近需要用到操作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);
      }
复制代码
相关文章
|
XML Java 数据格式
10Spring - 基于AspectJ的AOP开发 (XML的方式)
10Spring - 基于AspectJ的AOP开发 (XML的方式)
46 0
|
1月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
106 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
82 0
|
3月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
114 12
|
5月前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
52 3
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
73 3
|
5月前
|
XML Java 数据库连接
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
185 0
|
6月前
|
XML Java 数据库连接
Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
【5月更文挑战第10天】Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
80 6
|
6月前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
104 0
|
6月前
|
XML Java 数据格式
Spring注解驱动开发四纯注解实现声明式事务(无xml)
Spring注解驱动开发四纯注解实现声明式事务(无xml)
47 0