这里讲解一下linq对xml的基本操作,包括:

  • 新建xml、新建节点
  • 查询节点
  • 插入属性、插入节点
  • 替换节点

在这里我封装了一些常用的方法:

public class XmlHelper
{
/// <summary>
/// xml路径名
/// </summary>
public string XmlPath { get; set; } /// <summary>
/// 初始化XmlPath
/// </summary>
/// <param name="xmlPath"></param>
public XmlHelper(string xmlPath)
{
XmlPath = string.IsNullOrEmpty(xmlPath) ? "./my.xml" : xmlPath;
} /// <summary>
/// 初始化XML文件,如果原来有内容会被重置
/// </summary>
/// <param name="root">root名</param>
public void InitXml(string root = null)
{
if (!File.Exists(XmlPath))
{
File.Create(XmlPath).Close();
}
if (root == null)
{
root = @"root";
}
XDocument xdoc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(root, null)
);
xdoc.Save(XmlPath);
} /// <summary>
/// 创建Element
/// </summary>
/// <param name="elementName">ElementName</param>
/// <param name="elementValue">ElementValue</param>
/// <param name="xAttributes">属性数组(可选)</param>
/// <returns></returns>
public XElement CreateElement(string elementName, string elementValue, params XAttribute[] xAttributes)
{
XElement xElement = new XElement(elementName, elementValue);
if (xAttributes != null)
{
foreach (XAttribute xAttribute in xAttributes)
{
xElement.SetAttributeValue(xAttribute.Name, xAttribute.Value);
}
}
return xElement;
} /// <summary>
/// 查询第一个指定itemName的节点
/// </summary>
/// <param name="itemName"></param>
/// <returns></returns>
public XElement QueryFirstElementByName(string itemName)
{
XElement xele = XElement.Load(XmlPath);
if (xele.Name == itemName)
{
return xele;
}
else
{
XElement xele1 = xele.Element("item");
return xele1;
}
} /// <summary>
/// 查询查询第一个指定itemName、itemValue的节点
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <returns></returns>
public XElement QueryElementByNameAndValue(string itemName, string itemValue)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).FirstOrDefault();
return item;
} /// <summary>
/// 查询节点,通过itemName 和属性
/// </summary>
/// <param name="itemName"></param>
/// <param name="strAttributeName"></param>
/// <param name="strAttributeValue"></param>
/// <returns></returns>
public XElement QueryElementByNameAndAttri(string itemName, string strAttributeName,
string strAttributeValue)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Attribute(strAttributeName).Value == strAttributeValue
select ele).FirstOrDefault(); return item;
} /// <summary>
/// 在指定节点后添加节点
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="xElement"></param>
public void AddToElementAfter(string itemName, string itemValue, XElement xElement)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).SingleOrDefault();
if (item != null)
{
item.AddAfterSelf(xElement);
} xele.Save(XmlPath);
} /// <summary>
/// 在指定节点前添加节点
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="xElement"></param>
public void AddToElementBefore(string itemName, string itemValue, XElement xElement)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).SingleOrDefault();
if (item != null)
{
item.AddBeforeSelf(xElement);
} xele.Save(XmlPath);
} /// <summary>
/// 在指定节点名下添加节点
/// </summary>
/// <param name="itemName"></param>
/// <param name="xElement"></param>
public void AddElement(string itemName, XElement xElement)
{
XElement xele = XElement.Load(XmlPath);
if (itemName == xele.Name)
{
xele.Add(xElement);
}
else
{
XElement item = xele.Element(itemName);
if (item != null)
{
item.Add(xElement);
}
} //var item = (from ele in xele.Elements(itemName)
// where ele.Value.Equals(null)
// select ele).SingleOrDefault(); xele.Save(XmlPath);
}
/// <summary>
/// 在指定节点下添加节点
/// </summary>
/// <param name="rootElement"></param>
/// <param name="xElement"></param>
public void AddElement(XElement rootElement, XElement xElement)
{
XElement xele = XElement.Load(XmlPath);
if (xele.Name == rootElement.Name)
{
xele.Add(xElement);
}
else
{
var root = xele.Element(rootElement.Name.LocalName);
if (root != null)
{
root.Add(xElement);
}
}
xele.Save(XmlPath);
} /// <summary>
/// 为指定节点添加属性
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="attributeName"></param>
/// <param name="attributeValue"></param>
public void AddAttributeToEle(string itemName, string itemValue, string attributeName,
string attributeValue)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).SingleOrDefault();
if (item != null)
{
item.SetAttributeValue(attributeName, attributeValue);
}
xele.Save(XmlPath);
} /// <summary>
/// 在指定节点后添加注释
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="xcomment"></param>
public void AddCommentToAfter(string itemName, string itemValue, string xcomment)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).SingleOrDefault();
if (item != null)
{
XComment xcom = new XComment(xcomment);
item.AddAfterSelf(xcom);
xele.Save(XmlPath);
}
} /// <summary>
/// 在指定节点前添加注释
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="xcomment"></param>
public void AddCommentToBefore(string itemName, string itemValue, string xcomment)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).SingleOrDefault();
if (item != null)
{
XComment xcom = new XComment(xcomment);
item.AddBeforeSelf(xcom);
xele.Save(XmlPath);
}
} /// <summary>
/// 替换指定节点
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="xElement"></param>
public void ReplaceElement(string itemName, string itemValue, XElement xElement)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).FirstOrDefault();
if (item != null)
{
item.ReplaceWith(xElement);
}
xele.Save(XmlPath);
} /// <summary>
/// 移除指定属性
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
/// <param name="strAttribute"></param>
public void RemoveAttribute(string itemName, string itemValue, string strAttribute)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).FirstOrDefault().Attribute(strAttribute);
if (item != null)
{
item.Remove();
}
xele.Save(XmlPath);
} /// <summary>
/// 移除指定节点
/// </summary>
/// <param name="itemName"></param>
/// <param name="itemValue"></param>
public void RemoveElement(string itemName, string itemValue)
{
XElement xele = XElement.Load(XmlPath);
var item = (from ele in xele.Elements(itemName)
where ele.Value.Equals(itemValue)
select ele).FirstOrDefault();
if (item != null)
{
item.Remove();
}
xele.Save(XmlPath);
}
}

经过验证,速度还是挺快的,但是如果要短时间操作大量数据的话,就应该自己封装一下自己需要的功能来加快速度,或者使用其他方法。

xml linq的更多相关文章

  1. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

  2. 应用Xml.Linq读xml文件

    c#提供了System.Xml.Linq操作xml文件,非常方便,本文主要介绍如何应用System.Xml.Linq读取xml文件. xml文本 <?xml version="1.0& ...

  3. C# Xml Linq XDocument 基本操作 -- 重新学习

    person.xml <?xml version="1.0" encoding="utf-8"?> <MyP> <P1> & ...

  4. XML Linq 学习笔记

    XML如下: <?xml version="1.0" encoding="utf-8"?> <Dishes> <Dish> ...

  5. C#使用System.xml.linq来生成XML文件

    直接看代码: /* * <?xml version="1.0" encoding="utf-8"?> * <Files Path=" ...

  6. LinqToXml (一) Create Xml file By Dom /Linq

    目前,在xml 应用编程领域比较流行的开发模型是W3C 提供的DOM(文档对象模型),在.net Framework 通过命名空间 System.Xml 对该技术提供了支持.随着Linq to XMl ...

  7. LINQ系列:LINQ to XML类

    LINQ to XML由System.Xml.Linq namespace实现,该namespace包含处理XML时用到的所有类.在使用LINQ to XML时需要添加System.Xml.Linq. ...

  8. LINQ to XML 编程基础

    1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...

  9. C# ~ 从 XML 到 Linq 到 Linq to XML

    .XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...

随机推荐

  1. python学习之路---day03

    一:数据类型转换 1:bool-->int 将bool转成 int型 True 是1 False是0 a=True c=int(a) print(c) b=False d=int(b) prin ...

  2. Android Studio 常用应用

    1.在控制台的Logcat中输出测试语句 package com.example.lucky.helloworld; import android.support.v7.app.AppCompatAc ...

  3. 009 Android Fragment动态用法(实现动态菜单栏)设置控件为满屏状态

    ·1.MainActivity采用线性布局 2.在app--->res--->layout,右击new--->xml---->layout xml FILE <1> ...

  4. DEM反应不收敛问题

    之前算DEM反应一直不收敛,后来把计算规模减少到两个固定颗粒,也就是仿照reactive-chemistry和evaperation这两个算例. 目前reactive-chemistry这个算例,把各 ...

  5. POJ - 3696 同余

    给定\(L\),求最小的\(x\)满足$ L|8\frac{10^x-1}{9} $ /*H E A D*/ inline ll gcd(ll a,ll b){return b?gcd(b,a%b): ...

  6. 如何写一个简单的webserver(一):最简实现

    本文主要讲述如何用C/C++在Linux环境下写一个简单的支持并发的web服务器,并不考虑服务器的健壮性.安全性.性能等一系列因素. 在本文中,该服务器仅支持GET请求. 项目地址:https://g ...

  7. <th>折行显示

    设置了一些框架的样式导致折行显示失效,解决办法: https://jingyan.baidu.com/article/3a2f7c2e24cd1826afd611e7.html

  8. oracle 控制文件损坏处理

    一, 故障模拟 控制文件损坏 发现关闭不了 强制关闭   故障恢复   发现已经执行到mont阶段,因为这个不依靠控制文件 进入整段日志 cd /u01/app/oracle/diag/rdbms/o ...

  9. DB Intro - MongoDB User

    MongoDB 3.0 用户创建   摘要: MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别,这里就说明下3.0的添加用户的方法. 环境.测试: 在安装Mo ...

  10. 【3dsMax安装失败,如何卸载、安装3dMax 2015?】

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...