xml linq
这里讲解一下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的更多相关文章
- LINQ to XML LINQ学习第一篇
LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...
- 应用Xml.Linq读xml文件
c#提供了System.Xml.Linq操作xml文件,非常方便,本文主要介绍如何应用System.Xml.Linq读取xml文件. xml文本 <?xml version="1.0& ...
- C# Xml Linq XDocument 基本操作 -- 重新学习
person.xml <?xml version="1.0" encoding="utf-8"?> <MyP> <P1> & ...
- XML Linq 学习笔记
XML如下: <?xml version="1.0" encoding="utf-8"?> <Dishes> <Dish> ...
- C#使用System.xml.linq来生成XML文件
直接看代码: /* * <?xml version="1.0" encoding="utf-8"?> * <Files Path=" ...
- LinqToXml (一) Create Xml file By Dom /Linq
目前,在xml 应用编程领域比较流行的开发模型是W3C 提供的DOM(文档对象模型),在.net Framework 通过命名空间 System.Xml 对该技术提供了支持.随着Linq to XMl ...
- LINQ系列:LINQ to XML类
LINQ to XML由System.Xml.Linq namespace实现,该namespace包含处理XML时用到的所有类.在使用LINQ to XML时需要添加System.Xml.Linq. ...
- LINQ to XML 编程基础
1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...
- C# ~ 从 XML 到 Linq 到 Linq to XML
.XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...
随机推荐
- HDU - 4763 找出特殊规律的串
在一个Text串中找出Pattern串E以满足EAEBE,A B可以是任意串 看一眼觉得woc好难,后来看一下样例AB为空也可以 找观察一下E既是前缀也是后缀,很容易联想到next 最优情况EEE,那 ...
- Win10安装MySQL5.7.22解压缩版的方法及手动配置讲解
1.先去MYSQL官网下载安装包,解压放到C盘 2.新建一个my.ini文件放到bin文件夹下面,内容如下,路径对应自己的安装目录: [mysql] # 设置mysql客户端默认字符集 default ...
- Oracle Purge和drop的区别
转自: http://www.cnblogs.com/HondaHsu/archive/2012/09/28/2707487.html 最近发现oracle中出现了这些奇怪的表名,上网查找后发现是or ...
- javascript有哪些优秀的库,把你喜欢的都说出来吧
回复格式 应用领域 …… 你喜欢的js库名称 …… 作用(一句话) web …… jquery …… 众所周知的dom操作库 seajs …… js的管理框架 ejs …… 没有学习成本的js模 ...
- 什么是javascript的中间件?
第一次写博客,有点想在博客园试水的感觉,也分享下觉得有用的东西(源码自己写的) 什么是javascript中间件呢?函数middle就是用来构建中间件的,我用例子说明下 下面我定义了一个函数use,在 ...
- Linux中断分层--软中断和tasklet
1. Linux中断分层 (1)上半部:当中断发生时,它进行相应的硬件读写,并“登记”该中断.通常由中断处理程序充当上半部.(一般情况下,上半部不可被打断) (2)下半部:在系统空闲的时候,对上半部“ ...
- 实现Docker跨主机间的容器网络联通
Server1(Server) 192.168.81.58 内核版本 3.10.0-123.el7.x86_64 Docker版本 1.12.6Server2(Agent) 192.168.81.5 ...
- 前端性能优化之优化图片 && 优化显示图片
前端图片优化一直以来都是热门话题,从需求上来看,很多站点往往是图片体积大于代码体积, 图片请求多余代码文件请求, 给前端的性能带来了很大的困扰,那么应该如何解决呢? 零. 认识图片 我们通常使用的图片 ...
- 023-将表单序列化为json对象
使用jQuery将表单序列化为json对象,其中serializeJson方法的名字任意,serializeArray()这个jQuery提供的方法.this指的就是谁调用了这个方法. $.fn.se ...
- 给python解释器本身添加注册表
import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...