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 ...
随机推荐
- LeetCode109. 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 问题描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超 ...
- 【算法笔记】B1048 数字加密
1048 数字加密 (20 分) 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 ...
- 找出数组中的最小值(es5/es6)
1.命令式编程,只需要迭代数组,检查当前最小值是否大于数组元素,如果是更新最小值即可. var s = [2,3,4,5,6,7,8]; for(var i=0,m=s.length;i<m;i ...
- Mock单元测试
/// <summary> /// 普通插入 /// </summary> [Fact] public void InsertOrder_Tests() { _sqlMappe ...
- java 上传文件到 ftp 服务器
1. java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...
- Redis主从、哨兵、集群的简单区别
2018-10-26 主从:读写分离,备份哨兵:监控,自动转移,选主集群:数据 hash 分片,同时包含主从及哨兵特性
- 前端 day 039
一 .html css js 三大基本语言 定义文档的结构:HTML 修饰文档的样式 : css 行为 : JavaScript HTML 全称 Hyper Text Mackeup Langua ...
- 文献综述二:UML技术在行业资源平台系统建模中的应用
一.基本信息 标题:UML技术在行业资源平台系统建模中的应用 时间:2015 出版源:Hans汉斯 文件分类:uml技术的应用 二.研究背景 为方便行业人员高效率地搜集专业知识,实现知识的共享.采用计 ...
- 枚举类型与字符串ConvertEnumToString
枚举类型与字符串添加字典互转ConvertEnumToString using UnityEngine; using System.Collections; using UnityEngine.UI; ...
- 抽象工厂方法模式(Abstract Factory Pattern)
Provide an interface for creating families of related or dependent objects without specifying their ...