【干货集】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("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "'").Replace("\"", """);}#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("\'", "'").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文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内容增删改的一些通过方法)。当然可…...
Coursera自然语言处理专项课程04:Natural Language Processing with Attention Models笔记 Week01
Natural Language Processing with Attention Models Course Certificate 本文是学习这门课 Natural Language Processing with Attention Models的学习笔记,如有侵权,请联系删除。 文章目录 Natural Language Processing with Attention ModelsWeek 01…...
mysql MHA高可用
目录 工作原理 Node(节点) Manager(管理器) Node和Manager的协作 故障转移流程 优势 配置和管理 配置主从复制 MHA实现高可用 MySQL Master High Availability(MHA)是一个开源的高可用性解决方案&…...
android 扫描二维码
1.在你的build.gradle文件中添加Mobile Vision库的依赖: 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作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…...
case语句
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 CASE 语句的执行方式与 IF...THEN...ELSIF 语句的执行方式类似,但是它是通过一个表达式的值来决定执行哪个分支 CASE 选择器表达式 WHEN 条件 1 THEN 语句序列 …...
全国加油站分布数据/停车场分布/公园分布/景区分布/保护区分布/poi感兴趣点
加油站是指为汽车和其它机动车辆服务的、零售汽油和机油的补充站,一般为添加燃料油、润滑油等。由于加油站所销售的石油商品具有易燃爆、易挥发、易渗漏、易集聚静电荷的特性,故加油站以“安全”为第一准则。在加油站内严禁烟火,严禁从事可能…...
单片机简介(一)
51单片机 一台能够运行的计算机需要CPU做运算和控制,RAM做数据存储,ROM做程序存储,还有输入/输出设备(串行口、并行输出口等),这些被分为若干块芯片,安装在主板(印刷线路板…...
Naiveui将message挂载到axios拦截器
最近在做项目,需要将后端的请求结果打印出来 但是想着,要是这样一个一个手动引入naiveui的msg,那不得累死 于是灵机一动,想着既然所有接口要通过拦截器,为什么不将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 广告印象(AD Impression)第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 (Viewability)第四篇广…...
ES6: class类
类 class 面相对象class关键字创建类关于类的继承 面相对象 一切皆对象。 举例: 操作浏览器要使用window对象;操作网页要使用document对象;操作控制台要使用console对象; ES6中增加了类的概念,其实ES5中已经可以实现类…...
[中级]软考_软件设计_计算机组成与体系结构_08_输入输出技术
输入输出技术 前言控制方式考点往年真题 前言 输入输出技术就是IO技术 控制方式 程序控制(查询)方式:分为无条件传送和程序查询方式两种。 方法简单,硬件开销小,但I/O能力不高,严重影响CPU的利用率。 程序中断方式࿱…...
2024-04-04 问AI: 在深度学习中,微调是什么?
文心一言 在深度学习中,微调(Fine-tuning)是一种训练策略,特别针对预训练模型进行。预训练模型通常是在大规模无标注数据上通过自监督学习得到的,它们已经具备了对一般自然语言结构或视觉特征的良好理解能力。微调则是…...
db2数据仓库集群的搭建
db2数据仓库集群的搭建 DB2 集群的搭建通常涉及到多个环节,包括网络配置、DB2 软件安装、集群配置和数据库创建等。以下是搭建DB2集群的基本步骤,并不是实际的命令和配置,因为每个环境的具体配置可能会有所不同。 1、网络配置:确…...
Linux ARM平台开发系列讲解(u-boot篇) 5.1 u-boot的启动流程分析(ARMv8-a)
1. 概述 对于嵌入式来说,bootload对于开发人员来说并不陌生,但是在不同芯片架构中,bootload程序所做的一些操作是有所不同的,比如常见的STM32 Cotex-M和RK3568 之间的启动流程所做的操作是有所不同的。本小节就来概述一下U-boot的启动流程: 注意:本章节中的源码我大多数…...
ST表(数据结构中的问题)
RMQ问题 RMQ问题指对于数值,每次给一个区间[l,r],要求返回区间区间的最大值或最小值 也就是说,RMQ就是求区间最值的问题 对于RMQ问题,容易想到一种O(n)的方法,就是用i直接遍历[l,r]区间&…...
一、OpenCV(C#版本)环境搭建
一、Visual Studio 创建新项目 二、选择Windows窗体应用(.NET Framework) 直接搜索模板:Windows窗体应用(.NET Framework) 记得是C#哈,别整成VB(Visual Basic)了 PS:若搜索搜不到,直接点击安装多个工具和…...
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. 前言:2. 访问官方网站:3. Download Pentaho3.1 官网首页**滑动到最底**,寻找下载链接:3.2 跳转到下载界面后,选择 Pentaho Community Edition (CE)3.…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
