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 ...
随机推荐
- GCD(最大公约数)和LCM(最小公倍数)的求法
GCD(最大公约数) (1)辗转相除法(欧几里得算法)(常用) 将两个数a, b相除,如果余数c不等于0,就把b的值给a,c的值给b,直到c等于0,此时最大公约数就是b (2)更相减损术 将两个书中较 ...
- CodeForces - 779D String Game(二分)
Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. But i ...
- C++_类继承3-动态联编和静态联编
程序调用函数时,将使用哪个可执行代码块呢?编译器负责回答这个问题. 将源代码中的函数调用解释为特定的函数代码块被称为函数名联编(binding). 在C语言中,这非常简单,因为每个函数名对应一个不同的 ...
- ubuntu系统下如何切换输入法
如何切换输入法:ctrl+空格键 输入中文时如何翻页:键盘上的 - +两个键 super表示:美式键盘中的Win键
- AC自动机例题
P3808 [模板]AC自动机(简单版) [题目描述] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. #include<bits/stdc++.h> using name ...
- 动态规划 70.climbing Stairs
1. 记忆化搜索 - 自上向下的解决问题:使用vector来保存每次计算的结果,如果下次再碰到同样的需要计算的式子就不需要重复计算了. 2. 动态规划 - 自下向上的解决问题 解法一:自顶向下 解法二 ...
- D. Magic Gems(矩阵快速幂 || 无敌杜教)
https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间 ...
- PIE SDK灾前灾后对比
灾前灾后对比功能是GIS软件中常用的功能之一,指利用多时相获取的覆盖同一地表区域的遥感影像及其它辅助数据来确定和分析地表变化.它利用计算机图像处理系统,对不同时段目标或现象状态的变化进行识别.分析:它 ...
- 6.centos7 gitblit
1,安装注意事项 1)必须将gitblit安装在/opt/gitblit这个目录下,因为 服务启动的脚本里面默认就是这个路径 如果不按照这个路径安装需要修改脚本 mkdir -p /opt/gitbl ...
- 采用MQTT协议实现android消息推送(1)MQTT 协议简介
1.资料 mqtt官网 http://mqtt.org/ 服务端程序列表 https://github.com/mqtt/mqtt.github.io/wiki/servers 客户端库列表 http ...