当前位置: 首页 > news >正文

【干货集】C# XmlHelper帮助类操作Xml文档的通用方法汇总

前言

该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内容增删改的一些通过方法)。当然可能还有很多方法会漏了,假如各位同学好的方法可以在文末留言,我会统一收集起来。

C#XML基础入门

C# XML基础入门(XML文件内容增删改查清)👉‍

Xml反序列化为对象

#region Xml反序列化为对象/// <summary>/// Xml反序列化为指定模型对象/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="xmlContent">Xml内容</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static T XmlConvertToModel<T>(string xmlContent, bool isThrowException = false) where T : class{StringReader stringReader = null;try{XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));stringReader = new StringReader(xmlContent);return (T)xmlSerializer.Deserialize(stringReader);}catch (Exception ex){if (isThrowException){throw ex;}return null;}finally{stringReader?.Dispose();}}/// <summary>     /// 读取Xml文件内容反序列化为指定的对象  /// </summary>    /// <param name="filePath">Xml文件的位置(绝对路径)</param>  /// <returns></returns>    public static T DeserializeFromXml<T>(string filePath){try{if (!File.Exists(filePath))throw new ArgumentNullException(filePath + " not Exists");using (StreamReader reader = new StreamReader(filePath)){XmlSerializer xs = new XmlSerializer(typeof(T));T ret = (T)xs.Deserialize(reader);return ret;}}catch (Exception ex){return default(T);}}#endregion

对象序列化为Xml


#region 对象序列化为Xml/// <summary>/// 对象序列化为Xml/// </summary>/// <param name="obj">对象</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false){if (obj == null){return string.Empty;}try{using (StringWriter sw = new StringWriter()){Type t = obj.GetType();//强制指定命名空间,覆盖默认的命名空间  XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();//在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsinamespaces.Add(string.Empty, string.Empty);XmlSerializer serializer = new XmlSerializer(obj.GetType());//序列化时增加namespacesserializer.Serialize(sw, obj, namespaces);sw.Close();string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");return replaceStr;}}catch (Exception ex){if (isThrowException){throw ex;}return string.Empty;}}#endregion

Xml字符处理

#region Xml字符处理/// <summary>/// 特殊符号转换为转义字符/// </summary>/// <param name="xmlStr"></param>/// <returns></returns>public string XmlSpecialSymbolConvert(string xmlStr){return xmlStr.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("\'", "&apos;").Replace("\"", "&quot;");}#endregion

创建Xml文档


#region 创建Xml文档/// <summary>/// 创建Xml文档/// </summary>/// <param name="saveFilePath">文件保存位置</param>public void CreateXmlDocument(string saveFilePath){XmlDocument xmlDoc = new XmlDocument();//创建类型声明节点  XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");xmlDoc.AppendChild(node);//创建Xml根节点XmlNode root = xmlDoc.CreateElement("books");xmlDoc.AppendChild(root);XmlNode root1 = xmlDoc.CreateElement("book");root.AppendChild(root1);//创建子节点CreateNode(xmlDoc, root1, "author", "追逐时光者");CreateNode(xmlDoc, root1, "title", "XML学习教程");CreateNode(xmlDoc, root1, "publisher", "时光出版社");//将文件保存到指定位置xmlDoc.Save(saveFilePath/*"D://xmlSampleCreateFile.xml"*/);}/// <summary>    /// 创建节点    /// </summary>    /// <param name="xmlDoc">xml文档</param>    /// <param name="parentNode">Xml父节点</param>    /// <param name="name">节点名</param>    /// <param name="value">节点值</param>    ///   public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value){//创建对应Xml节点元素XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);node.InnerText = value;parentNode.AppendChild(node);}#endregion

Xml数据读取


#region Xml数据读取/// <summary>/// 读取Xml指定节点中的数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="node">节点</param>/// <param name="attribute">读取数据的属性名</param>/// <returns>string</returns>/*************************************************** 使用示列:* XmlHelper.XmlReadNodeAttributeValue(path, "/books/book", "author")************************************************/public static string XmlReadNodeAttributeValue(string filePath, string node, string attribute){string value = "";try{XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xmlNode = doc.SelectSingleNode(node);value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);}catch { }return value;}/// <summary>/// 获得xml文件中指定节点的节点数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="nodeName">节点名</param>/// <returns></returns>public static string GetNodeInfoByNodeName(string filePath, string nodeName){string XmlString = string.Empty;XmlDocument xml = new XmlDocument();xml.Load(filePath);XmlElement root = xml.DocumentElement;XmlNode node = root.SelectSingleNode("//" + nodeName);if (node != null){XmlString = node.InnerText;}return XmlString;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public string[] ReadAllChildallValue(string node, string filePath){int i = 0;string[] str = { };XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点if (nodelist.Count > 0){str = new string[nodelist.Count];foreach (XmlElement el in nodelist)//读元素值{str[i] = el.Value;i++;}}return str;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public XmlNodeList ReadAllChild(string node, string filePath){XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点return nodelist;}#endregion

Xml插入数据

#region Xml插入数据/// <summary>/// Xml指定节点元素属性插入数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="element">元素名</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")************************************************/public static void XmlInsertValue(string path, string node, string element, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);if (element.Equals("")){if (!attribute.Equals("")){XmlElement xe = (XmlElement)xmlNode;xe.SetAttribute(attribute, value);}}else{XmlElement xe = doc.CreateElement(element);if (attribute.Equals(""))xe.InnerText = value;elsexe.SetAttribute(attribute, value);//添加新增的节点xmlNode.AppendChild(xe);}//保存Xml文档doc.Save(path);}catch { }}#endregion

Xml修改数据


#region Xml修改数据/// <summary>/// Xml指定节点元素属性修改数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")************************************************/public static void XmlUpdateValue(string path, string node, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);XmlElement xmlElement = (XmlElement)xmlNode;if (attribute.Equals(""))xmlElement.InnerText = value;elsexmlElement.SetAttribute(attribute, value);//保存Xml文档doc.Save(path);}catch { }}#endregion

Xml删除数据


#region Xml删除数据/// <summary>/// 删除数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlDelete(path, "/books", "book")************************************************/public static void XmlDelete(string path, string node, string attribute){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);XmlElement xe = (XmlElement)xn;if (attribute.Equals(""))xn.ParentNode.RemoveChild(xn);elsexe.RemoveAttribute(attribute);doc.Save(path);}catch { }}#endregion

完整的XmlHelper帮助类

注意:有些方法不能保证百分之百没有问题的,假如有问题可以留言给我,我会验证并立即修改。


/// <summary>/// Xml帮助类/// </summary>public class XMLHelper
{#region Xml反序列化为对象/// <summary>/// Xml反序列化为指定模型对象/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="xmlContent">Xml内容</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static T XmlConvertToModel<T>(string xmlContent, bool isThrowException = false) where T : class
{StringReader stringReader = null;try{XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));stringReader = new StringReader(xmlContent);return (T)xmlSerializer.Deserialize(stringReader);}catch (Exception ex){if (isThrowException){throw ex;}return null;}finally{stringReader?.Dispose();}}/// <summary>     /// 读取Xml文件内容反序列化为指定的对象  /// </summary>    /// <param name="filePath">Xml文件的位置(绝对路径)</param>  /// <returns></returns>    public static T DeserializeFromXml<T>(string filePath){try{if (!File.Exists(filePath))throw new ArgumentNullException(filePath + " not Exists");using (StreamReader reader = new StreamReader(filePath)){XmlSerializer xs = new XmlSerializer(typeof(T));T ret = (T)xs.Deserialize(reader);return ret;}}catch (Exception ex){return default(T);}}#endregion#region 对象序列化为Xml/// <summary>/// 对象序列化为Xml/// </summary>/// <param name="obj">对象</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false){if (obj == null){return string.Empty;}try{using (StringWriter sw = new StringWriter()){Type t = obj.GetType();//强制指定命名空间,覆盖默认的命名空间  XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();//在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsinamespaces.Add(string.Empty, string.Empty);XmlSerializer serializer = new XmlSerializer(obj.GetType());//序列化时增加namespacesserializer.Serialize(sw, obj, namespaces);sw.Close();string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");return replaceStr;}}catch (Exception ex){if (isThrowException){throw ex;}return string.Empty;}}#endregion#region Xml字符处理/// <summary>/// 特殊符号转换为转义字符/// </summary>/// <param name="xmlStr"></param>/// <returns></returns>public string XmlSpecialSymbolConvert(string xmlStr){return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "&apos;").Replace("\"", """);}#endregion#region 创建Xml文档/// <summary>/// 创建Xml文档/// </summary>/// <param name="saveFilePath">文件保存位置</param>public void CreateXmlDocument(string saveFilePath){XmlDocument xmlDoc = new XmlDocument();//创建类型声明节点  XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");xmlDoc.AppendChild(node);//创建Xml根节点XmlNode root = xmlDoc.CreateElement("books");xmlDoc.AppendChild(root);XmlNode root1 = xmlDoc.CreateElement("book");root.AppendChild(root1);//创建子节点CreateNode(xmlDoc, root1, "author", "追逐时光者");CreateNode(xmlDoc, root1, "title", "XML学习教程");CreateNode(xmlDoc, root1, "publisher", "时光出版社");//将文件保存到指定位置xmlDoc.Save(saveFilePath/*"D://xmlSampleCreateFile.xml"*/);}/// <summary>    /// 创建节点    /// </summary>    /// <param name="xmlDoc">xml文档</param>    /// <param name="parentNode">Xml父节点</param>    /// <param name="name">节点名</param>    /// <param name="value">节点值</param>    ///   public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value){//创建对应Xml节点元素XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);node.InnerText = value;parentNode.AppendChild(node);}#endregion#region Xml数据读取/// <summary>/// 读取Xml指定节点中的数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="node">节点</param>/// <param name="attribute">读取数据的属性名</param>/// <returns>string</returns>/*************************************************** 使用示列:* XmlHelper.XmlReadNodeAttributeValue(path, "/books/book", "author")************************************************/public static string XmlReadNodeAttributeValue(string filePath, string node, string attribute){string value = "";try{XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xmlNode = doc.SelectSingleNode(node);value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);}catch { }return value;}/// <summary>/// 获得xml文件中指定节点的节点数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="nodeName">节点名</param>/// <returns></returns>public static string GetNodeInfoByNodeName(string filePath, string nodeName){string XmlString = string.Empty;XmlDocument xml = new XmlDocument();xml.Load(filePath);XmlElement root = xml.DocumentElement;XmlNode node = root.SelectSingleNode("//" + nodeName);if (node != null){XmlString = node.InnerText;}return XmlString;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public string[] ReadAllChildallValue(string node, string filePath){int i = 0;string[] str = { };XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点if (nodelist.Count > 0){str = new string[nodelist.Count];foreach (XmlElement el in nodelist)//读元素值{str[i] = el.Value;i++;}}return str;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public XmlNodeList ReadAllChild(string node, string filePath){XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点return nodelist;}#endregion#region Xml插入数据/// <summary>/// Xml指定节点元素属性插入数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="element">元素名</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")************************************************/public static void XmlInsertValue(string path, string node, string element, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);if (element.Equals("")){if (!attribute.Equals("")){XmlElement xe = (XmlElement)xmlNode;xe.SetAttribute(attribute, value);}}else{XmlElement xe = doc.CreateElement(element);if (attribute.Equals(""))xe.InnerText = value;elsexe.SetAttribute(attribute, value);//添加新增的节点xmlNode.AppendChild(xe);}//保存Xml文档doc.Save(path);}catch { }}#endregion#region Xml修改数据/// <summary>/// Xml指定节点元素属性修改数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")************************************************/public static void XmlUpdateValue(string path, string node, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);XmlElement xmlElement = (XmlElement)xmlNode;if (attribute.Equals(""))xmlElement.InnerText = value;elsexmlElement.SetAttribute(attribute, value);//保存Xml文档doc.Save(path);}catch { }}#endregion#region Xml删除数据/// <summary>/// 删除数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlDelete(path, "/books", "book")************************************************/public static void XmlDelete(string path, string node, string attribute){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);XmlElement xe = (XmlElement)xn;if (attribute.Equals(""))xn.ParentNode.RemoveChild(xn);elsexe.RemoveAttribute(attribute);doc.Save(path);}catch { }}#endregion}

相关文章:

【干货集】C# XmlHelper帮助类操作Xml文档的通用方法汇总

前言 该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法&#xff08;主要包括Xml序列化和反序列化&#xff0c;Xml文件读取&#xff0c;Xml文档节点内容增删改的一些通过方法&#xff09;。当然可…...

Coursera自然语言处理专项课程04:Natural Language Processing with Attention Models笔记 Week01

Natural Language Processing with Attention Models Course Certificate 本文是学习这门课 Natural Language Processing with Attention Models的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Natural Language Processing with Attention ModelsWeek 01…...

mysql MHA高可用

目录 工作原理 Node&#xff08;节点&#xff09; Manager&#xff08;管理器&#xff09; Node和Manager的协作 故障转移流程 优势 配置和管理 配置主从复制 MHA实现高可用 MySQL Master High Availability&#xff08;MHA&#xff09;是一个开源的高可用性解决方案&…...

android 扫描二维码

1.在你的build.gradle文件中添加Mobile Vision库的依赖&#xff1a; dependencies {implementation com.google.android.gms:play-services-vision:20.1.0 } 2.创建一个新的Activity来处理扫描过程。 import android.Manifest; import android.content.pm.PackageManager; i…...

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…...

case语句

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 CASE 语句的执行方式与 IF...THEN...ELSIF 语句的执行方式类似&#xff0c;但是它是通过一个表达式的值来决定执行哪个分支 CASE 选择器表达式 WHEN 条件 1 THEN 语句序列 …...

全国加油站分布数据/停车场分布/公园分布/景区分布/保护区分布/poi感兴趣点

加油站是指为汽车和其它机动车辆服务的、零售汽油和机油的补充站&#xff0c;一般为添加燃料油、润滑油等。由于加油站所销售的石油商品具有易燃爆、易挥发、易渗漏、易集聚静电荷的特性&#xff0c;故加油站以“安全”为第一准则。在加油站内严禁烟火&#xff0c;严禁从事可能…...

单片机简介(一)

51单片机 一台能够运行的计算机需要CPU做运算和控制&#xff0c;RAM做数据存储&#xff0c;ROM做程序存储&#xff0c;还有输入/输出设备&#xff08;串行口、并行输出口等&#xff09;&#xff0c;这些被分为若干块芯片&#xff0c;安装在主板&#xff08;印刷线路板&#xf…...

Naiveui将message挂载到axios拦截器

最近在做项目&#xff0c;需要将后端的请求结果打印出来 但是想着&#xff0c;要是这样一个一个手动引入naiveui的msg&#xff0c;那不得累死 于是灵机一动&#xff0c;想着既然所有接口要通过拦截器&#xff0c;为什么不将msg写在拦截器呢 一、定义一个消息挂载文件 // The…...

MySQL、Oracle查看字节和字符长度个数的函数

目录 0. 总结1. MySQL1.1. 造数据1.2. 查看字符/字节个数 2. Oracle2.1. 造数据2.2. 查看字符/字节个数 0. 总结 databasecharbyteMySQLchar_length()length()Oraclelength()lengthB() 1. MySQL 1.1. 造数据 sql drop table if exists demo; create table demo (id …...

第五篇:3.4 用户归因和受众(User attribution and audience) - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xff09;第四篇广…...

ES6: class类

类 class 面相对象class关键字创建类关于类的继承 面相对象 一切皆对象。 举例&#xff1a; 操作浏览器要使用window对象&#xff1b;操作网页要使用document对象&#xff1b;操作控制台要使用console对象&#xff1b; ES6中增加了类的概念&#xff0c;其实ES5中已经可以实现类…...

[中级]软考_软件设计_计算机组成与体系结构_08_输入输出技术

输入输出技术 前言控制方式考点往年真题 前言 输入输出技术就是IO技术 控制方式 程序控制(查询)方式&#xff1a;分为无条件传送和程序查询方式两种。 方法简单&#xff0c;硬件开销小&#xff0c;但I/O能力不高&#xff0c;严重影响CPU的利用率。 程序中断方式&#xff1…...

2024-04-04 问AI: 在深度学习中,微调是什么?

文心一言 在深度学习中&#xff0c;微调&#xff08;Fine-tuning&#xff09;是一种训练策略&#xff0c;特别针对预训练模型进行。预训练模型通常是在大规模无标注数据上通过自监督学习得到的&#xff0c;它们已经具备了对一般自然语言结构或视觉特征的良好理解能力。微调则是…...

db2数据仓库集群的搭建

db2数据仓库集群的搭建 DB2 集群的搭建通常涉及到多个环节&#xff0c;包括网络配置、DB2 软件安装、集群配置和数据库创建等。以下是搭建DB2集群的基本步骤&#xff0c;并不是实际的命令和配置&#xff0c;因为每个环境的具体配置可能会有所不同。 1、网络配置&#xff1a;确…...

Linux ARM平台开发系列讲解(u-boot篇) 5.1 u-boot的启动流程分析(ARMv8-a)

1. 概述 对于嵌入式来说,bootload对于开发人员来说并不陌生,但是在不同芯片架构中,bootload程序所做的一些操作是有所不同的,比如常见的STM32 Cotex-M和RK3568 之间的启动流程所做的操作是有所不同的。本小节就来概述一下U-boot的启动流程: 注意:本章节中的源码我大多数…...

ST表(数据结构中的问题)

RMQ问题 RMQ问题指对于数值&#xff0c;每次给一个区间[l,r]&#xff0c;要求返回区间区间的最大值或最小值 也就是说&#xff0c;RMQ就是求区间最值的问题 对于RMQ问题&#xff0c;容易想到一种O&#xff08;n&#xff09;的方法&#xff0c;就是用i直接遍历[l,r]区间&…...

一、OpenCV(C#版本)环境搭建

一、Visual Studio 创建新项目 二、选择Windows窗体应用&#xff08;.NET Framework&#xff09; 直接搜索模板&#xff1a;Windows窗体应用(.NET Framework) 记得是C#哈&#xff0c;别整成VB(Visual Basic)了 PS&#xff1a;若搜索搜不到&#xff0c;直接点击安装多个工具和…...

ubuntu远程服务部署,Docker,蓝牙无线局域网,SSH,VNC,xfce4,NextTerminal,宝塔,NPS/NPC,gost,openwrt

SSH服务 apt update apt upgrade -y apt install -y openssh-server/etc/ssh/sshd_config PermitRootLogin yesDocker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun apt install -y docker-compose宝塔 wget -O install.sh https://download.bt.cn…...

kettle安装与部署使用教程

kettle 官网下载与部署使用 文章目录 kettle 官网下载与部署使用1. 前言&#xff1a;2. 访问官方网站&#xff1a;3. Download Pentaho3.1 官网首页**滑动到最底**&#xff0c;寻找下载链接&#xff1a;3.2 跳转到下载界面后&#xff0c;选择 Pentaho Community Edition (CE)3.…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...