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

关于 xpath 查找 XML 元素的一点总结

测试环境

Win7 64

python 3.4.0

实践出真知

代码如下,更换不同的 xpath,和 response_to_check 进行测试

实验 1

xpath = ".//xmlns:return//xmlns:copeWith"

response_to_check = '' \

'<soap:Envelope xmlns="http://www.examp.com"

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" >' \

' <node2>' \

' <id>goods1</id>' \

' </node2> ' \

' <ns1:Body

xmlns:ns1="http://service.rpt.data.platform.ddt.sf.com/">' \

' <ns2:selectByPrimaryKeyResponse

xmlns:ns2="http://service.rpt.data.platform.ddt.sf2.com/" ' \

' xmlns="http://www.overide_first_defaul_xmlns.com"> ' \

' <return>' \

' <copeWith>1.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>144</id>' \

' <invoice>2</invoice>' \

' <invoiceType></invoiceType>' \

' <orderCode>DDT201704071952057186</orderCode>' \

' <orderDate>2017-04-07 19:52:06.0</orderDate>' \

' <paid>0.01</paid>' \

' <payType>pc</payType>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId>2</userId>' \

' </return>' \

' <return>' \

' <copeWith>2.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>143</id>' \

' <invoice>2</invoice>' \

' <invoiceType></invoiceType>' \

' <orderCode>DDT201704071951065731</orderCode>' \

' <orderDate>2017-04-07 19:51:07.0</orderDate> ' \

' <paid>0.01</paid>' \

' <payType>pc</payType>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId>2</userId>' \

' </return>' \

' <return>' \

' <copeWith>3.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>142</id>' \

' <invoice>2</invoice>' \

' <invoiceType></invoiceType>' \

' <orderCode>DDT201704071945408575</orderCode>' \

' <orderDate>2017-04-07 19:45:40.0</orderDate>' \

' <paid>0.01</paid>' \

' <payType>pc</payType>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId>2</userId>' \

' </return> ' \

' <return attr="re">' \

' <copeWith>4.00</copeWith>' \

' <copeWith>5.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>141</id>' \

' <invoice>1</invoice>' \

' <invoiceType>增值税普通发票</invoiceType>' \

' <orderCode>DDT201704071845403738</orderCode>' \

' <orderDate>2017-04-07 18:45:41.0</orderDate>' \

' <paid>0.01</paid>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId attr="testattr">2</userId>' \

' </return>' \

' </ns2:selectByPrimaryKeyResponse>' \

' </ns1:Body>' \

' <ns1:Body

xmlns:ns1="http://service.rpt.data.platform.ddt.sf.com/">' \

' <ns2:selectByPrimaryKeyResponse

xmlns:ns2="http://service.rpt.data.platform.ddt.sf2.com/"> ' \

' </ns2:selectByPrimaryKeyResponse>' \

' <ns2:selectByPrimaryKeyResponse

xmlns:ns2="http://service.rpt.data.platform.ddt.sf2.com/"> ' \

' </ns2:selectByPrimaryKeyResponse>' \

' </ns1:Body>' \

'</soap:Envelope>'

root = ET.fromstring(response_to_check)

print(root)

if xpath == '.':

text_of_element = root.text

else:

xmlnsnamespace_dic = {} # 存放名称空间定义

print('正在获取 xmlns 定义')

match_result_list =re.findall('xmlns[^:]?=(.+?)[ |\>|\\\>]',

response_to_check, re.MULTILINE)

if match_result_list:

xmlns = match_result_list[len(match_result_list) - 1]

xmlns = xmlns.strip(' ')

xmlns = '{' + xmlns + '}'

print('xmlns 定义为:%s' % xmlns)

xmlnsnamespace_dic['xmlns'] = xmlns

print('正在获取"xmlns:xxx 名称空间定义')

match_result_list = re.findall('xmlns:(.+?)=(.+?)[ |>]',

response_to_check)

for ns in match_result_list:

xmlnsnamespace_dic[ns[0]] = '{' + ns[1] + '}'

print("最后获取的 prefix:uri 为:%s" % xmlnsnamespace_dic)

print('正在转换元素结点前缀')

for dic_key in xmlnsnamespace_dic.keys():

namespace = dic_key + ':'

if namespace in xpath:

uri = xmlnsnamespace_dic[dic_key]

xpath = xpath.replace(namespace, uri)

xpath = xpath.replace('"','')

print('转换后用于查找元素的 xpath%s' % xpath)

try:

elements_list = root.findall(xpath)

except Exception as e:

print('查找元素出错:%s' % e)

print('查找到的元素为:%s' % elements_list)

for element in elements_list:

text_of_element = element.text

print(text_of_element)

实验结果

以下为 xpath 设置不同值时的查找结果

/node

查找结果:报错,不能使用绝对路径

./node2

查找结果:找不到元素

./Body

查找结果:找不到元素

./ns1:Body/selectByPrimaryKeyResponse

查找结果:找不到元素

./ns1:Body/ns2:selectByPrimaryKeyResponse/return

查找结果:找不到元素

./ns1:Body/ns2:selectByPrimaryKeyResponse/xmlns:return[1]/copeWith

查找结果:找不到元素

-----------------------------

.

查找结果:根元素,即 Envelope 元素

ns1:Body

查找结果:所有名称空间为 ns1 的 Body 元素

./ns1:Body

查找结果:等同 ns1:Body

./ns1:Body/ns2:selectByPrimaryKeyResponse

查找结果:所有名称空间为 ns1 的 Body 元素下的所有名为 selectByPrimaryKeyResponse

的子元素

./ns1:Body/ns2:selectByPrimaryKeyResponse[2]

查找结果:所有名称空间为 ns1 的 Body 元素下,名称空间为 ns2 的第 2 个名为

selectByPrimaryKeyResponse 的子元素

./ns1:Body/ns2:selectByPrimaryKeyResponse/xmlns:return

查找结果:所有名称空间为 ns1 的 Body 元素下,所有名称空间为 ns2,名称为

selectByPrimaryKeyResponse 的子元素下,所有名称空间定义为

http://www.overide_first_defaul_xmlns.com 的 return 元素

./ns1:Body/ns2:selectByPrimaryKeyResponse/xmlns:return[1]/xmlns:copeWit

h

查找结果:所有名称空间为 ns1 的 Body 元素下,所有名称空间为 ns2,名称为

selectByPrimaryKeyResponse 的子元素下,第一个名称空间定义为

http://www.overide_first_defaul_xmlns.com 的 return 元素下,

名称空间定义为 http://www.overide_first_defaul_xmlns.com 的 copyWith 元素

.//xmlns:copeWith

查找结果:所有名称空间定义为 http://www.overide_first_defaul_xmlns.com 的

copeWith 元素

.//xmlns:copeWith[2]

查找结果:同一个元素节点下,名称空间定义为

http://www.overide_first_defaul_xmlns.com 的第二个 copeWith 元素(例中为

<copeWith>5.00</copeWith>' ,注意:这里的数字是针对兄弟节点的,下同,不再赘述)

# 注意:[]里面不支持 last()这种谓词,数字可以

.//xmlns:return//xmlns:copeWith"

查找结果:所有名称空间定义为 http://www.overide_first_defaul_xmlns.com 的

return 元素下,所有名称空间定义为 http://www.overide_first_defaul_xmlns.com

的 copeWith 元素

实验 2

对比实验 1,去掉 selectByPrimaryKeyResponse 元素中的 xmlns 定义:

xmlns="http://www.overide_first_defaul_xmlns.com"

xpath = ".//xmlns:return//xmlns:copeWith"

response_to_check = '' \

'<soap:Envelope xmlns="http://www.examp.com"

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" >' \

' <node2>' \

' <id>goods1</id>' \

' </node2> ' \

' <ns1:Body

xmlns:ns1="http://service.rpt.data.platform.ddt.sf.com/">' \

' <ns2:selectByPrimaryKeyResponse

xmlns:ns2="http://service.rpt.data.platform.ddt.sf2.com/" ' \

' > ' \

' <return>' \

' <copeWith>1.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>144</id>' \

' <invoice>2</invoice>' \

' <invoiceType></invoiceType>' \

' <orderCode>DDT201704071952057186</orderCode>' \

' <orderDate>2017-04-07 19:52:06.0</orderDate>' \

' <paid>0.01</paid>' \

' <payType>pc</payType>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId>2</userId>' \

' </return>' \

' <return>' \

' <copeWith>2.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>143</id>' \

' <invoice>2</invoice>' \

' <invoiceType></invoiceType>' \

' <orderCode>DDT201704071951065731</orderCode>' \

' <orderDate>2017-04-07 19:51:07.0</orderDate> ' \

' <paid>0.01</paid>' \

' <payType>pc</payType>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId>2</userId>' \

' </return>' \

' <return>' \

' <copeWith>3.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>142</id>' \

' <invoice>2</invoice>' \

' <invoiceType></invoiceType>' \

' <orderCode>DDT201704071945408575</orderCode>' \

' <orderDate>2017-04-07 19:45:40.0</orderDate>' \

' <paid>0.01</paid>' \

' <payType>pc</payType>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId>2</userId>' \

' </return> ' \

' <return attr="re">' \

' <copeWith>4.00</copeWith>' \

' <copeWith>5.00</copeWith>' \

' <discount>0.99</discount>' \

' <id>141</id>' \

' <invoice>1</invoice>' \

' <invoiceType>增值税普通发票</invoiceType>' \

' <orderCode>DDT201704071845403738</orderCode>' \

' <orderDate>2017-04-07 18:45:41.0</orderDate>' \

' <paid>0.01</paid>' \

' <productName>快递包</productName>' \

' <state>0</state>' \

' <userId attr="testattr">2</userId>' \

' </return>' \

' </ns2:selectByPrimaryKeyResponse>' \

' </ns1:Body>' \

' <ns1:Body

xmlns:ns1="http://service.rpt.data.platform.ddt.sf.com/">' \

' <ns2:selectByPrimaryKeyResponse

xmlns:ns2="http://service.rpt.data.platform.ddt.sf2.com/"> ' \

' </ns2:selectByPrimaryKeyResponse>' \

' <ns2:selectByPrimaryKeyResponse

xmlns:ns2="http://service.rpt.data.platform.ddt.sf2.com/"> ' \

' </ns2:selectByPrimaryKeyResponse>' \

' </ns1:Body>' \ '</soap:Envelope>'

实验结果

.//xmlns:return//xmlns:copeWith

查找结果:所有名称空间定义为 http://www.examp.com 的 return 元素下,所有名称空

间定义为 http://www.examp.com 的 copeWith 元素

实验 3

xpath = "./xmlns:string"

response_to_check =''\

'<ArrayOfString

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' \

' xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns="http://WebXml.com.cn/">' \

' <string>阿尔及利亚,3320</string>' \

' <string>阿根廷,3522</string>' \

' <string>阿曼,3170</string>' \

' <string>阿塞拜疆,3176</string>' \

' <string>埃及,3317</string>' \

' <string>埃塞俄比亚,3314</string>' \

' <string>爱尔兰,3246</string>' \

' <string>奥地利,3237</string>' \

' <string>澳大利亚,368</string>' \

' <string>巴基斯坦,3169</string>' \

' <string>巴西,3580</string>' \

' <string>保加利亚,3232</string>' \

' <string>比利时,3243</string>' \

'</ArrayOfString>'

实验结果:

./string

查找结果:找不到元素

./xmlns:string

查找结果:根元素下,所有名称空间定义为 xmlns 的 string 元素

实验 4

对比实验 3,去掉 xmlns=xmlns="http://WebXml.com.cn/

xpath = "./string"

response_to_check =''\

'<ArrayOfString

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' \

' xmlns:xsd="http://www.w3.org/2001/XMLSchema">' \

' <string>阿尔及利亚,3320</string>' \

' <string>阿根廷,3522</string>' \

' <string>阿曼,3170</string>' \

' <string>阿塞拜疆,3176</string>' \

' <string>埃及,3317</string>' \

' <string>埃塞俄比亚,3314</string>' \

' <string>爱尔兰,3246</string>' \

' <string>奥地利,3237</string>' \

' <string>澳大利亚,368</string>' \

' <string>巴基斯坦,3169</string>' \

' <string>巴西,3580</string>' \

' <string>保加利亚,3232</string>' \

' <string>比利时,3243</string>' \

'</ArrayOfString>'

实验结果:

./string

查找结果:根元素下,所有名称空间定义为 http://WebXml.com.cn/的 string 元素

总结

1)xmlns=URI 定义元素默认的名称空间,使得作用范围内,可不用为元素显示设置名称空

间前缀。

<element_node xmlns=URI>

<node1>

...

<node2>

</element_node>

xmlns=URI 的作用域如下:

<element_node xmlns=URI>

作用域,也就是说,仅在元素范围内

</element>

2) 一份 xml 文档中,同时只能存在一个默认的 xmlns 名称空间,后续元素标签中定义的

xmlns 会自动导致前面定义的 xmlns 不可用

3)为元素设置自定义名称空间,形式如下:

<namespace:element_name xmlns:namespace=URI>

</namespace:element_name>

4)xpath 查找,不能使用绝对路径。

5)根据实验 1,实验 1&实验 2 对比,实验 3&实验 4 对比得出:

如果设置了 xmlns(默认名称空间 xmlns=xxxx,或者非默认的自定义名称空间

xmlns:prefix=URI),那么 xpath 查找名称空间作用域内的子元素时,必须使用名称空间

查找./xmlns:node_name、./prefix:node_name。

如果 xmlns 默认名称空间作用域范围内,子元素标签内设置了自定义名称空间,那么使用

自定义名称空间查找 ./…/prefix:node_name

如果既没定义默认名称空间,也没设置自定义名称空间,那么 xpath 查找元素时可不用指

定名称空间 ./node_name

 

相关文章:

关于 xpath 查找 XML 元素的一点总结

测试环境 Win7 64 python 3.4.0 实践出真知 代码如下&#xff0c;更换不同的 xpath&#xff0c;和 response_to_check 进行测试 实验 1 xpath ".//xmlns:return//xmlns:copeWith" response_to_check \ <soap:Envelope xmlns"http://www.examp.com…...

JavaScript学习教程,从入门到精通,XMLHttpRequest 与 Ajax 请求详解(25)

XMLHttpRequest 与 Ajax 请求详解 一、XMLHttpRequest 概述 XMLHttpRequest (XHR) 是一个 JavaScript API&#xff0c;用于在浏览器和服务器之间传输数据&#xff0c;而无需刷新页面。它是实现 Ajax (Asynchronous JavaScript and XML) 技术的核心。 主要特点&#xff1a; …...

HTML、XHTML 和 XML区别

HTML、XHTML 和 XML 这三兄弟的区别 HTML: 老大哥&#xff0c;负责网页长啥样&#xff0c;性格比较随和&#xff0c;有点小错误也能容忍。XHTML: 二哥&#xff0c;看着像 HTML&#xff0c;但规矩严&#xff0c;是按 XML 的规矩来的 HTML&#xff0c;更规范。XML: 小弟&#xf…...

形象解释 HTTP 的四种常见请求方式及其中的区别联系

HTTP 的常见请求方式常见的有四种&#xff1a;GET、POST、PUT、DELETE&#xff0c;它们各自的功能不一样。 &#x1f35c; 场景比喻&#xff1a;HTTP 请求像“去餐厅点菜” 请求方式行为餐厅比喻说明GET获取数据看菜单/问服务员&#xff1a;你们有什么菜&#xff1f;不带食材、…...

微信小程序根据图片生成背景颜色有效果图

效果图 取得是图片中间10个像素算出背景颜色 .wxml <canvas type"2d" id"imageCanvas" style"--w: {{w}}px;--h: {{h}}px;" /> <view style"background: {{backgroundColor}};"><image bind:tap"updateIndex&qu…...

实时步数统计系统 kafka + spark +redis

基于微服务架构设计并实现了一个实时步数统计系统&#xff0c;采用生产者-消费者模式&#xff0c;利用Kafka实现消息队列&#xff0c;Spark Streaming处理实时数据流&#xff0c;Redis提供高性能数据存储&#xff0c;实现了一个高并发、低延迟的数据处理系统&#xff0c;支持多…...

使用 Docker 安装 SQL Server 2022 并解决 Navicat 连接问题

在使用 Docker 安装 SQL Server 时&#xff0c;很多人可能遇到过无法通过 Navicat 等数据库客户端连接到容器的情况。尤其是尝试使用 mcr.microsoft.com/mssql/server:2022-latest 镜像时&#xff0c;可能会发现 Navicat一直转圈&#xff0c;无法连接到数据库。在这篇博客中&am…...

使用 Node、Express 和 MongoDB 构建一个项目工程

本文将详细介绍如何使用 Node.js Express MongoDB 构建一个完整的 RESTful API 后端项目&#xff0c;涵盖&#xff1a; 项目初始化 Express 服务器搭建 MongoDB 数据库连接 REST API 设计&#xff08;CRUD 操作&#xff09; 错误处理与中间件 源码结构与完整代码 部署建…...

基本元器件电阻、电容、电感的高频知识和大厂真题解析

本文首先举例分析各个方向的工程师如何定制化准备硬件岗位面试,各个击破; 然后根据实战经验总结硬件领域中电阻电容电感等的主要笔试、面试高频考题考点; 最后,列出最新最全的基本元器件笔试面试的真题和模拟题,供大家参考。 本专栏预计更新50期左右。当前第3期 一、硬件…...

Unity InputSystem触摸屏问题

最近把Unity打包后的windows软件放到windows触摸屏一体机上测试&#xff0c;发现部分屏幕触摸点击不了按钮&#xff0c;测试了其他应用程序都正常。 这个一体机是这样的&#xff0c;一个电脑机箱&#xff0c;外接一个可以触摸的显示屏&#xff0c;然后UGUI的按钮就间歇性点不了…...

分布式微服务架构,数据库连接池设计策略

在分布式微服务架构中&#xff0c;数据库连接池的设计远比单体应用复杂&#xff0c;涉及资源隔离、连接管理、性能调优和高可用等问题。下面是面向专业软件架构师的系统化分析与策略建议&#xff1a; 一、核心挑战 每个服务独立运行&#xff0c;连接池分散 每个微服务维护自己的…...

差分信号抗噪声原理:

差分信号抗噪声原理&#xff1a; 差分信号除了能很好地解决发送和接收参考点电位不同的问题外&#xff0c;差分信号的另一个重要优势就是在一定条件下其抗干扰能力比单端信号更强。对于单端信号传输&#xff0c;外界对它的干扰噪声直接叠加在信号上&#xff0c;接收端直接检测输…...

【数据分析】酵母实验多指标数据的 R 语言分析与可视化

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载必要的R包数据下载定义函数发育分析(development analysis)数据导入与预处理数据子集创建绘图模型分析两两比较生存分析(survival analysis)数据导入与预处理数据子集创建绘…...

AI | 最近比较火的几个生成式对话 AI

关注&#xff1a;CodingTechWork 引言 生成式对话 AI 正在迅速改变我们与机器交互的方式&#xff0c;从智能助手到内容创作&#xff0c;其应用范围广泛且深远。本文将深入探讨几款当前热门的生成式对话 AI 模型&#xff0c;包括 Kimi、DeepSeek、ChatGPT、文心一言、通义千问和…...

将视频生成视频二维码步骤

如何将视频链接生成二维码 生成与视频关联的二维码通常涉及以下几个方面&#xff1a;选择合适的库或工具、准备视频链接以及将其转换为二维码图像。以下是详细的说明&#xff1a; 使用JavaScript/Vue框架生成二维码 在前端开发中&#xff0c;可以使用 qrcode 或者 vue-qrcod…...

以安科瑞 EMS3.0 为依托,打造网荷储充一体化典范

在“双碳”目标与能源革命的浪潮中&#xff0c;安科瑞电气股份有限公司推出的EMS3.0微电网智慧能源平台&#xff0c;以“源-网-荷-储-充”全链路协同为核心&#xff0c;通过物联网、大数据与AI技术的深度融合&#xff0c;为企业提供了一套智能化、高效化、低碳化的能源管理解决…...

堆和二叉树--数据结构初阶(3)(C/C++)

文章目录 前言理论部分堆的模拟实现:(这里举的大根堆)堆的创建二叉树的遍历二叉树的一些其他功能实现 作业部分 前言 这期的话讲解的是堆和二叉树的理论部分和习题部分 理论部分 二叉树的几个性质:1.对于任意一个二叉树&#xff0c;度为0的节点比度为2的节点多一个 2.对于完全…...

CLIP和SimCLR集成到图像-文本检索系统技术实现步骤和部署方案(代码版)

将 CLIP(多模态对比学习)和 SimCLR(单模态对比学习)集成到 图像-文本检索系统(如搜索引擎、电子商务平台)的技术实现步骤和部署方案,结合代码示例与工程化思路: ### 一、技术实现核心步骤 1. 环境搭建与依赖安装 # 安装 PyTorch(支持 GPU 加速) pip install torch…...

R/G-B/G色温坐标系下对横纵坐标取对数的优势

有些白平衡色温坐标系会分别对横纵坐标取对数运算。 这样做有什么优势呢? 我们知道对数函数对0-1之间的因变量值具有扩展作用。即自变量x变化比较小时,经过对数函数作用后可以把因变量扩展到较大范围内,即x变化较小时,y变化较大,增加了识别数据的识别性。 由于Raw数据中的…...

Java开发工具IntelliJ IDEA v2025.1——全面支持Java 24、整合AI

IntelliJ IDEA 是由 JetBrains 开发的智能 Java IDE&#xff0c;提供代码自动补全、重构工具、框架集成&#xff08;Spring/JPA 等&#xff09;、数据库工具和调试支持&#xff0c;通过深度代码分析与跨语言功能优化企业级开发流程&#xff0c;被广泛认可为专业 Java 开发者的高…...

IDEA启动报错Failed to create JVM. JVM path的解决办法

今天修改了 IntelliJ IDEA 2023.1 的配置文件 idea64.exe.vmoptions 后启动报错&#xff1a; if you already hava a JDK installed, define a JAVA_HOME variable in Computer > Systen Properties > System Settings > Environment Variables.Failed to create JV…...

R语言中的常用内置函数

常用的数值函数 常用的字符函数 与概率分布相关的函数 有用的统计函数 数据来源:《数据挖掘与数据分析&#xff1a;基于R语言》王阳 2024年1月出版...

docker容器监控自动恢复

关于实现对docker容器监控以及自动恢复&#xff0c;这里介绍两种实现方案。 方案1&#xff1a; 实现思路&#xff1a; 找到&#xff08;根据正则表达式&#xff09;所有待监控的docker容器&#xff0c;此处筛选逻辑根据docker运行状态找到已停止&#xff08;Exit&#xff09;类…...

【记录手贱bug日常】IDEA 配置vmoptions后打不开,重新安装,删注册表均无用

今天早上来公司&#xff0c;闲着没事优化优化自己的"锄头"idea&#xff0c;然后想着看看idea用的啥垃圾回收器&#xff0c;后来手动改成了-XX:UseG1GC&#xff0c;满心欢喜觉得没什么问题&#xff0c;直接删除缓存重启&#xff0c;结果不出意料的出问题了&#xff0c…...

STM32F407使用ESP8266实现阿里云OTA(中)

文章目录 前言一、程序分析二、程序讲解1. main函数2. Get_Version()函数3. esp_Init()函数4. Check_Updata()函数结语前言 从上一章STM32F407使用ESP8266实现阿里云OTA(上)中我们已经对连接阿里云和从阿里云获取升级包的流程非常的熟悉了。所以本章我们进行STM32的程序开发…...

如何利用快照与备份快速恢复服务器的数据

在服务器上利用**快照&#xff08;Snapshot&#xff09;**和**备份&#xff08;Backup&#xff09;**快速恢复数据&#xff0c;可显著减少停机时间并确保业务连续性。以下是具体操作步骤和最佳实践&#xff1a; --- ### **1. 快照&#xff08;Snapshot&#xff09;恢复** **适…...

【Leetcode 每日一题】2799. 统计完全子数组的数目

问题背景 给你一个由 正 整数组成的数组 n u m s nums nums。 如果数组中的某个子数组满足下述条件&#xff0c;则称之为 完全子数组 &#xff1a; 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序…...

主流操作系统对比分析(macOS、Linux、Windows、Unix)

主流操作系统对比分析&#xff08;macOS、Linux、Windows、Unix&#xff09; 一、系统基本介绍 系统核心特点典型代表macOS苹果公司开发&#xff0c;基于 Unix&#xff08;BSD&#xff09;&#xff0c;闭源&#xff0c;专为苹果硬件优化&#xff0c;强调用户体验和设计美学。m…...

Qt使用 SQLite 数据库的基本方法

在 Qt 中&#xff0c;使用 SQLite 数据库的基本方法与 MySQL 类似&#xff0c;但 SQLite 是一个轻量级的嵌入式数据库&#xff0c;通常不需要外部数据库服务器。你可以直接在本地磁盘上操作 SQLite 数据库文件。 1. 安装 SQLite 驱动 通常&#xff0c;Qt 默认包含了对 SQLite…...

【刷题系列】LeetCode消失的数字、轮转数组

文章目录 1、消失的数字1.1 题目描述1.2 题目分析 2、轮转数字2.1 题目描述2.2 题目分析 1、消失的数字 原题链接&#xff1a;消失的数字 1.1 题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗…...

Unreal Niagara制作SubUV贴图翻页动画

SubUV翻页动画是游戏中的常见功能&#xff0c;通过对每一小块UV进行移动可以模拟动画效果&#xff0c;接下来对下图进行SubUV动画的制作。 (金币测试图下载地址&#xff1a;https://download.csdn.net/download/grayrail/90684422&#xff09; 最终效果如下&#xff1a; 1.…...

【C++】模版初阶:函数模板、类模板

文章目录 一、为什么要使用模板二、什么是函数模板1、函数模板&#xff08;1&#xff09;概念&#xff08;2&#xff09;格式&#xff08;3&#xff09;原理&#xff08;4&#xff09;函数模板的实例化&#xff08;5&#xff09;模板参数的匹配原则 2、类模板&#xff08;1&…...

Kotlin基础知识全面解析(下)

文章目录 第六章&#xff1a;集合与函数式编程6.1 集合概述6.2 集合操作6.3 序列 第七章&#xff1a;协程与异步编程7.1 协程基础7.2 挂起函数7.3 异步与等待7.4 协程上下文与调度器 第八章&#xff1a;Kotlin标准库8.1 作用域函数let函数run函数with函数apply函数also函数 8.2…...

NVIDIA高级辅助驾驶安全报告解析

近期参加了NVIDIA高级辅助驾驶开发者实验室&#xff0c;读了NVIDIA的高级辅助驾驶安全报告白皮书&#xff0c;里面涉及了不少有意思的内容&#xff0c;大致分享下英伟达在高级辅助驾驶领域的安全性上的工作。 最令人印象深刻的是NVIDIA提出的"四大支柱"架构&#x…...

HarmonyOS:一多能力介绍:一次开发,多端部署

概述 如果一个应用需要在多个设备上提供同样的内容&#xff0c;则需要适配不同的屏幕尺寸和硬件&#xff0c;开发成本较高。HarmonyOS 系统面向多终端提供了“一次开发&#xff0c;多端部署”&#xff08;后文中简称为“一多”&#xff09;的能力&#xff0c;可以基于一种设计…...

位运算题目:解码异或后的排列

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;解码异或后的排列 出处&#xff1a;1734. 解码异或后的排列 难度 6 级 题目描述 要求 有一个整数数组 perm \texttt{perm} perm&#xff0c;是前…...

elasticsearch查询中的特殊字符影响分析

大家先看一个执行的dsl 查询sql,大致的意思是排除某些分类下的商品 GET /productinfos/_search {"from": 0,"query": {"bool": {"must": [{"exists": {"field": "minprice"}},{"bool": {&qu…...

Django创建的应用目录详细解释以及如何操作数据库自动创建表

创建好Django项目后 如果要创建 python manage.py startapp 模块名模块 使用 我创建一个system模块后是 注意:urls是我自己建的文件 1.migrations目录 存放数据库的迁移文件,当models.py中模型定义发生变化时&#xff0c;通过迁移操作能同步数据库结构变化 __init__ 使该目录…...

Visual Studio Code 使用tab键往左和往右缩进内容

使用VSCode写东西&#xff0c;经常遇到多行内容同时缩进的情况&#xff0c;今天写文档的时候就碰到&#xff0c;记录下来&#xff1a; 往右缩进 选中多行内容&#xff0c;点tab键&#xff0c;会整体往右缩进&#xff1a; 往左缩进 选中多行内容&#xff0c;按shifttab&am…...

数据结构算法复杂度介绍

数据结构&#xff1a;互相之间存在一种或者多种特定元素的集合&#xff0c;在逻辑上分为线性结构&#xff0c;散列结构&#xff0c;、树形结构、图形结构等。 算法&#xff1a;求解具体问题的步骤描述&#xff0c;代码上表现出来是解决特定问题的一组有限的指令序列。简单来说…...

SiamMask中的分类分支、回归分支与Mask分支,有何本质差异?

SiamMask中的分类分支、回归分支与Mask分支&#xff0c;有何本质差异&#xff1f; 一、引言二、分支定位与任务目标三、网络结构与感受野设计3.1 分类分支&#xff08;Classification Head&#xff09;3.2 回归分支&#xff08;Regression Head&#xff09;3.3 Mask分支&#x…...

使用 Typora + PicGo + Gitee/GitHub 构建 Markdown 图床技术方案

使用 Typora PicGo Gitee/GitHub 构建 Markdown 图床技术方案 AuthorDateVersionNoteTao Wang2025-04-24V1.0Release the document. 文章目录 使用 Typora PicGo Gitee/GitHub 构建 Markdown 图床技术方案前言核心概念解析图床技术原理 环境搭建基础工具清单软件安装流程 …...

问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)

本文将对"问道数码兽"这一经典卡通风格回合制手游的服务端部署与客户端调整流程进行详细拆解&#xff0c;适用于具备基础 Windows 运维和手游源码调试经验的开发者参考使用。教程以实战为导向&#xff0c;基于原始说明内容重构优化&#xff0c;具备较高的内容查重避重…...

Electron Forge【实战】百度智能云千帆大模型 —— AI聊天

1. 获取 Access Key 与 Secret Key 登录百度智能云 https://login.bce.baidu.com/ 2. 安装node.js sdk npm install baiducloud/qianfan3. src/main.ts import { setupIPC } from "./ipc";在 const mainWindow 之后 setupIPC(mainWindow);4. src/ipc.ts import { ipc…...

机器人操作中的生成式 AI:综述(下)

25年3月来自香港大学、香港理工、香港科大、浙大和清华大学的论文“Generative Artificial Intelligence in Robotic Manipulation: A Survey”。 本综述全面回顾机器人操作领域生成学习模型的最新进展&#xff0c;并探讨该领域的关键挑战。机器人操作面临着关键瓶颈&#xff…...

把一个 PyTorch 的图像张量转换成 NumPy 格式,并按照正确的维度顺序显示出来

示例代码&#xff1a; plt.imshow(np.transpose(tensor_denorm.numpy(), (1, 2, 0)))它的作用是&#xff1a;把一个 PyTorch 的图像张量转换成 NumPy 格式&#xff0c;并按照正确的维度顺序显示出来。 &#x1f680; 一步步解释&#xff1a; ✅ tensor_denorm 这是一个形状为…...

windows上的RagFlow+ollama知识库本地部署

一、 docker的安装与部署 1. 下载Docker Desktop 访问Docker官网并下载适用于Windows的Docker Desktop安装程序。 RagFlow对docker的要求&#xff1a; Docker ≥ 24.0.0 & Docker Compose ≥ v2.26. docker 下载地址&#xff1a; https://www.docker.com/ Get Docker | D…...

【docker】 pull FROM build

镜像拉取失败 token问题 DeadlineExceeded: failed to fetch anonymous token Get "https://auth.docker.io/token?...": dial tcp 157.240.20.8:443: i/o timeout1. 检查网络连通性 如果 curl 命令卡住或超时,说明网络到 Docker Hub 存在问题。 ping regt-1.doc…...

【数据分析实战】使用 Matplotlib 绘制玫瑰图

🌹 1、简述 玫瑰图,又称极坐标柱状图(Polar Bar Chart),是一种特殊的条形图,适用于展示方向型数据,例如: 风向频率图(Wind Rose)每月、每日不同类别统计圆形时间序列展示(如12个月销售量分布)在本篇博客中,我们将使用 matplotlib 画出玫瑰图,包括基本玫瑰图、多…...

第十四届蓝桥杯省B.砍树

第十四届蓝桥杯省B.砍树 题目 题目解析及思路 考虑一对无序数对的点 x和 y&#xff0c;如果我们砍掉某条边可以让这两个点不连通&#xff0c;那么这条边一定是从 x到 y 路径上的一点&#xff0c;我们可以让从 x到 y 路径的边权值都加1。这个操作我们可以使用树上差分。 对于 …...