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 ...
随机推荐
- tornado 09 cookie和session
tornado 09 cookie和session 一.cookie #有什么办法能够让浏览器记住登录信息,下次再打开的时候可以自动登录?网站是如何记录登录信息的? class SetCookieHa ...
- quill 设置 初始值...
1down voteaccepted For your first issue change this: text.value = JSON.stringify(quill.root.innerHTM ...
- docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers).
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled ...
- abp + angular 项目 图标字体注意事项
用的字体建议下载到本地,否则部署环境没有网络的话,则图片字体会不正常显示.
- XAML 绑定和结构体不得不说的问题
遇见一个问题 如果用一个结构体struct.再用一个ListView,然后使用绑定. <Window x:Class="WpfApp1.MainWindow" xmlns=& ...
- BZOJ 3224 Treap
部分还没调到满意的程度,效率比splay略好 #include<bits/stdc++.h> using namespace std; const int maxn = 1e6+11; u ...
- 安装Samba服务让宿主机和虚拟机共享文件
安装 samba 服务器之后,很方便的实现 Windows 和 Linux 进行通信. 安装步骤: 1 .在 Ubuntu 系统下面安装 samba 服务: $ sudo apt-get instal ...
- ckeditor和ckfinder
ckeditor是一个所见即所得的富文本编辑器,用来代替drupal自带的编辑器. 但是从drupal.com下载的ckeditor模块本身没有实现功能,它指向了由cdn.ckeditor.com所提 ...
- HDU 5313——Bipartite Graph——————【二分图+dp+bitset优化】
Bipartite Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- jquery获取元素与屏幕高度距离
a. onscroll事件 scroll是css样式中overflow的一个值,意思是显示滚动条;当一个元素的实际高度超过他的最大高度是,只要设置了overflow为scroll b. $(..).s ...