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

C/C++ xml库

文章目录

  • 一、介绍
    • 1.1 xml 介绍
    • 1.2 xml 标准
    • 1.3 xml 教程
    • 1.4 xml 构成
  • 二、C/C++ xml 库选型
    • 2.1 选型范围
    • 2.2 RapidXML
    • 2.3 tinyxml2
    • 2.4 pugixml
    • 2.5 libxml++
  • 五、性能比较
    • 5.1 C++ xml 相关的操作有哪些
    • 5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较
  • 六、其他问题
    • 6.1 version和 encoding的取值范围

一、介绍

1.1 xml 介绍

XML(eXtensible Markup Language,可扩展标记语言)是一种标记语言,主要用于存储和传输数据。它定义了数据的结构和语义,但不定义数据的呈现方式。XML 是一种自描述的语言,易于理解和使用。以下是 XML 的一些关键特点:

  1. 可扩展性:用户可以定义自己的标签,使其适应不同的需求。
  2. 自描述性:标签本身描述了数据的内容和结构。
  3. 简洁性:与HTML相比,XML标签更简洁,减少了冗余。
  4. 可读性:标签清晰,易于人类阅读和理解。
  5. 跨平台:可以在任何操作系统上使用,与平台无关。
  6. 数据交换:广泛用于不同系统之间的数据交换。

1.2 xml 标准

  • XML 1.0:1998年2月首次发布,是XML的基础版本。
  • XML 1.0 第二版:2000年10月发布,包含了一些修正和澄清。
  • XML 1.1:2001年2月发布,旨在解决XML 1.0中的一些问题,特别是字符编码和特殊字符的处理。
  • XML 1.1 第二版:2006年4月发布,包含了对XML 1.1的一些小的修正和改进。(改进了字符编码处理,支持更多的 Unicode 字符)

要查看 XML 的历史规范和标准,可以访问以下资源:

  1. W3C 官方网站

    • https://www.w3.org/TR/
    • 这是查看 XML 规范和其他 Web 标准的主要资源。
  2. XML 1.0 规范

    • https://www.w3.org/TR/REC-xml/
    • https://www.w3.org/TR/xml11/
    • https://www.w3.org/TR/2008/REC-xml-20081126/
  3. XML 1.1 规范

    • https://www.w3.org/TR/xml11/
    • https://www.w3.org/TR/2006/REC-xml11-20060816/
  4. W3C XML 活动页面

    • https://www.w3.org/XML/
    • 提供了关于 XML 技术的最新信息和资源。
  5. 互联网档案馆

    • https://archive.org/
    • 有时可以找到早期的规范文档和历史版本。

通过这些资源,你可以获取 XML 的详细规范、历史版本和相关的技术文档。这有助于了解 XML 的发展历史和当前标准。

1.3 xml 教程

  • XML 简介
  • https://www.runoob.com/
  • https://www.w3school.com.cn/xml/index.asp
  • https://www.cnblogs.com/antLaddie/p/14823874.html
  • DOM 和 SAX

在这里插入图片描述

1.4 xml 构成

XML(Extensible Markup Language,可扩展标记语言)文档由以下基本构成要素组成:

  1. XML声明 (<?xml version="1.0" encoding="UTF-8"?>): 可选的,位于文档最开始,用来指定XML版本和字符编码等信息。

  2. 元素 (Elements): XML文档的基本构建块,有开始标签(如 <item>)和结束标签(如 </item>),元素可以包含文本、其他元素或者属性。

  3. 属性 (Attributes): 元素可以有属性,用来提供额外信息。属性在元素的开始标签内定义(如 <item id="123">),属性值必须加引号。

  4. 文本 (Text): 元素内部的字符数据,可以是文本或者实体引用。

  5. 注释 (Comments): 以 <!-- 开始,--> 结束,用于添加文档的注释信息,它们在XML文档中会被忽略。

  6. 处理指令 (Processing Instructions): 以 <? 开始,?> 结束,用于提供处理器指令(如XML声明),通常用于指定文档相关的配置信息。

  7. 文档类型声明 (Document Type Declaration, DTD): 以 <!DOCTYPE 开始,用来定义文档的结构和元素的合法性规则,可以包含元素和属性的声明。

  8. CDATA区 (Character Data): 以 <![CDATA[ 开始,]]> 结束,用来包含不应被XML解析器解析的文本。

  9. 实体 (Entities): 可以是字符引用(如 &lt; 表示 <)或实体引用(如 &copy; 表示版权符号),用于表示特殊或不可见的字符。

  10. 命名空间 (Namespaces): 用于区分相同名称的不同元素和属性,避免命名冲突。

  11. 属性列表 (Attribute List): 某些元素可以有一系列的属性,这些属性提供了关于元素的附加信息。

一个简单的XML文档示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description>An in-depth look at creating applications with XML.</description></book><!-- More book elements can go here -->
</catalog>

在这个示例中,catalog 是根元素,book 是子元素,每个 book 元素有多个子元素如 authortitle 等,以及一个 id 属性。

二、C/C++ xml 库选型

2.1 选型范围

  • 资料
    • https://rapidxml.sourceforge.net/manual.html
    • C/C++ xml库比较
    • xml解析库对比总结(解析方式,第三方库,TinyXml)
    • 深入对比XML处理库:Mini-XML、TinyXML-2与libxml2
    • C++类库Pugixml与rapidxml性能评测
  • 开源库
    1. RapidXML、cereal-RapidXML:仅DOM方式、速度快、v1.3 2009
    2. pugixml:仅DOM方式、速度快、支持XPath1.0查询、C++、好集成、v10.0.0 2023-10-31
    3. libxml
      • libxml2:C
      • libxml++:C++
    4. tinyxml2:C++、好集成、API简单
  • 结论
    • 性能:RapidXML 和 PugiXML 在解析大型XML文件时表现优异。 (时间和空间)
    • 易用性:TinyXML2 和 PugiXML 的API设计简洁直观,易于学习和使用。
    • 功能全面性:libxml2 和 libxml++ 提供了最全面的功能,包括XML验证、XPath查询和XSLT转换-
    • 选择哪个库取决于你的具体需求,例如是否需要XPath支持、是否需要处理大型文件、是否需要C++绑定等。根据这些因素,你可以决定最适合你项目的XML库。

在这里插入图片描述

2.2 RapidXML

  • 注意:cereal 序列化库选用RapidXML和RapidJSON,可见其性能强劲。
  • 官网: https://rapidxml.sourceforge.net/
    • 最新版本和更新时间:v1.3 2009/05/13 01:46:17
  • 官网手册: https://rapidxml.sourceforge.net/manual.html
  • 第三方源码:https://github.com/Fe-Bell/RapidXML
  • c++开源库rapidxml介绍与示例
  • rapidxml 文件读写,增加删除节点

2.3 tinyxml2

  • https://github.com/leethomason/tinyxml2
  • 最新版本和更新时间:v10.0.0 2023-10-31
  • C++那些事之优雅的解析XML
  • TinyXML2使用教程
  • tinyxml2使用方法
  • C++ XML 库 TinyXML2 的基本使用

使用方式:

  1. 源码集成:仅 tinyxml2.h 和 tinyxml2.cpp 两个文件
  2. 库集成:tinyxml2.h 和 静/动态库

在这里插入图片描述

2.4 pugixml

  • Pugixml一种快速解析XML文件的开源解析库
  • 官网:https://pugixml.org/
  • 源码:https://github.com/zeux/pugixml
    • 当前最新版本和更新时间:v1.14_2023-10-02
  • C/C++编程:pugixml
  • https://www.cnblogs.com/Gale-Tech/p/16089326.html
  • https://blog.csdn.net/FL1768317420/article/details/136385775
    在这里插入图片描述

2.5 libxml++

  • https://libxmlplusplus.sourceforge.net/

  • https://libxmlplusplus.github.io/libxmlplusplus/

  • https://github.com/libxmlplusplus/libxmlplusplus

  • libxml2:

    • 官网地址:http://xmlsoft.org/
    • 源码地址:http://xmlsoft.org/sources/

在这里插入图片描述

五、性能比较

5.1 C++ xml 相关的操作有哪些

在 C++ 中,XML 相关的操作可以通过多种库来实现,这些操作包括但不限于:

  1. 解析(Parsing)

    • 将 XML 字符串或文件解析为一个可操作的内部结构,通常是 DOM(Document Object Model)。
  2. 序列化(Serialization)

    • 将 DOM 或其他内存中的结构转换回 XML 格式的字符串或写入文件。
  3. 查询(Querying)

    • 使用 XPath 表达式在 XML 文档中查找特定的元素或属性。
  4. 修改(Modifying)

    • 编辑 XML 文档的内容,包括添加、删除或更改元素和属性。
  5. 创建(Creating)

    • 从头开始构建 XML 文档,添加元素和属性。
  6. 验证(Validating)

    • 检查 XML 文档是否符合某个模式(如 DTD 或 XML Schema)。
  7. 遍历(Traversal)

    • 通过 DOM 遍历 XML 文档的节点。
  8. 操作属性(Manipulating Attributes)

    • 获取和设置 XML 元素的属性。
  9. 处理命名空间(Handling Namespaces)

    • 管理 XML 文档中的命名空间。
  10. 事件驱动解析(Event-driven Parsing)

    • 使用 SAX(Simple API for XML)风格的接口进行事件驱动的解析。
  11. 转换(Transformation)

    • 使用 XSLT(eXtensible Stylesheet Language Transformations)转换 XML 文档。
  12. 生成(Generation)

    • 动态生成 XML 数据,例如作为 API 响应。

在 C++ 中,一些流行的 XML 处理库包括:

  • TinyXML and TinyXML-2:轻量级的 XML 解析库,提供基本的解析和序列化功能,但不直接支持 XPath。
  • RapidXML:一个快速的、不使用异常的 DOM 解析器,同样不提供 XPath 支持。
  • libxml2:一个功能全面的 XML 库,支持 DOM、SAX、XPath 和 XSLT。
  • PugiXML:一个轻量级的、简单易用的 XML 解析库,支持 XPath 查询。
  • Xerces-C++:一个基于 Apache Xerces 的 XML 解析库,支持 DOM、SAX 和 XPath。

使用这些库,开发者可以执行上述的 XML 操作,以满足不同的开发需求。选择哪个库取决于项目的具体需求、性能考虑以及个人偏好。

5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较

  • 测试: 读文件
  • 结论:
    • 小文件:rapidxml 速度 >> Pugixml ≈ TinyXML2
    • 大文件:Pugixml > rapidxml > TinyXML2
// g++ -o test-xml main.cpp pugixml-1.14/pugixml.cpp tinyxml2-10.0.0/tinyxml2.cpp
#include <iostream>
#include "pugixml-1.14/pugixml.hpp"
#include "pugixml-1.14/pugiconfig.hpp"
#include <sys/time.h>#include "rapidxml-1.13/rapidxml.hpp"
#include "rapidxml-1.13/rapidxml_print.hpp"
#include "rapidxml-1.13/rapidxml_utils.hpp"#include "tinyxml2-10.0.0/tinyxml2.h"using namespace std;#define TEST_TIMES 10int pugixmltestmain( void )
{pugi::xml_document doc;timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){gettimeofday( &starttime, 0 );if( !doc.load_file( "xml/login.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n  pugixmltest  the average costs = " << timeAverage << "ms\r\n\r\n" << endl;return 0;
}using namespace rapidxml;
using std::cout;
using std::endl;int rapidxmltestmain()
{timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;//< parse xmlfor( int i = 0 ; i < TEST_TIMES; ++i ){rapidxml::file<> filename( "xml/login.xml" );xml_document<> doc;gettimeofday( &starttime, 0 );doc.parse<0>( filename.data() );gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;doc.clear();timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n  rapidxmltest  the average costs = " << timeAverage << "ms\r\n\r\n" << endl;return 0;
}using namespace tinyxml2;
int tinyxml2testmain( void )
{XMLDocument doc;// doc.LoadFile( "resources/dream.xml" );// doc.ErrorID();timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){gettimeofday( &starttime, 0 );if( XML_SUCCESS != doc.LoadFile( "xml/login.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n  tinyxml2test  the average costs = " << timeAverage << "ms\r\n\r\n" << endl;return 0;
}
int main()
{pugixmltestmain();rapidxmltestmain();tinyxml2testmain();
}

如果没有xml文件 就在测试目录增加一个xml目录,里面创建login.xml
Xml内容如下

<?xml version="1.0"?>
<Request><PK_Type><Name>LOGIN</Name></PK_Type><Info><UserName>admin</UserName><PassWord>21232f297a57a5a743894a0e4a801fc3</PassWord><FSUID>26201907030003</FSUID><FSUIP>172.16.88.192</FSUIP><FSUMAC>00-0c-29-de-4c-58</FSUMAC><FSUVER>1.0.01</FSUVER></Info>
</Request>
  • 测试大文件:197KB
    在这里插入图片描述
  • 测试小文件:1KB
    在这里插入图片描述

六、其他问题

6.1 version和 encoding的取值范围

<?xml version="1.0" encoding="ISO-8859-1"?>其中version和 encoding的取值范围在哪可以查

<?xml version="1.0" encoding="ISO-8859-1"?> 是 XML 文档的声明,位于文档的最前面。这个声明用于告诉解析器有关 XML 文档的版本和编码信息。

  • version 属性指定了 XML 文档使用的 XML 版本,目前最常见的是 “1.0”。W3C 定义的 XML 1.0 标准有两个版本:1.0 和 1.1。因此,version 属性的取值范围通常为 “1.0” 或 “1.1”。

  • encoding 属性指定了 XML 文档使用的字符编码。XML 允许使用多种字符编码,包括但不限于:

    • UTF-8
    • UTF-16
    • ISO-8859-1(Latin-1 Western European)
    • ISO-8859-2(Latin-2 Central European)
    • ISO-8859-3(Latin-3 South European)
    • ISO-8859-4(Latin-4 North European)
    • ISO-8859-5(Latin/Cyrillic)
    • ISO-8859-6(Latin/Arabic)
    • ISO-8859-7(Latin/Greek)
    • ISO-8859-8(Latin/Hebrew)
    • ISO-8859-9(Latin-5 Turkish)
    • 等等

要查找 versionencoding 的取值范围,可以查阅以下资源:

  1. XML 1.0 标准:定义了 XML 的基本语法和行为,包括版本信息。可以在 W3C 的官方网站上找到:XML 1.0 Specification。

  2. XML 1.1 标准:在 XML 1.0 的基础上做了一些扩展,包括对更多字符编码的支持。可以在 W3C 的官方网站上找到:XML 1.1 Specification。

  3. 字符编码标准:如 IANA(Internet Assigned Numbers Authority)Character Sets 列出了多种字符编码。

  4. W3C 的 Encoding 标准:提供了关于 Web 文档字符编码的详细信息,包括如何在 HTTP 头部和 HTML 中指定编码:Character Encoding for HTML & XML。

通过这些资源,您可以找到所有有效的 XML 版本和编码选项,以及它们的使用方式和限制。

相关文章:

C/C++ xml库

文章目录 一、介绍1.1 xml 介绍1.2 xml 标准1.3 xml 教程1.4 xml 构成 二、C/C xml 库选型2.1 选型范围2.2 RapidXML2.3 tinyxml22.4 pugixml2.5 libxml 五、性能比较5.1 C xml 相关的操作有哪些5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较 六、其他问题6.1 version和 e…...

UniVue@v1.5.0版本发布:里程碑版本

前言 以后使用UniVue都推荐使用1.5.0以后的版本&#xff0c;这个版本之后&#xff0c;更新的速度将会放缓。 希望这个框架能够切实的帮助大家更好的开发游戏&#xff0c;做出一款好游戏&#xff01;本开源项目采用的开源协议为MIT协议&#xff0c;完全开源化&#xff0c;以后也…...

在 Windows 上开发.NET MAUI 应用_2.生成你的第一个应用

先决条件 Visual Studio 2022 17.8 或更高版本&#xff0c;并安装了 .NET Multi-platform App UI 工作负载。 可参考上一篇文章&#xff1a;http://t.csdnimg.cn/n38Yy 创建应用 1.启动 Visual Studio 2022。 在开始窗口中&#xff0c;单击“创建新项目”以创建新项目&#…...

配置SMTP服务器的要点是什么?有哪些限制?

配置SMTP服务器安全性如何保障&#xff1f;如何高效配置服务器&#xff1f; SMTP作为电子邮件发送的核心协议&#xff0c;其配置对于确保邮件的成功传递和安全至关重要。AokSend将详细介绍配置SMTP服务器的关键要点&#xff0c;帮助读者建立一个高效、安全的邮件发送系统。 配…...

图形渲染基础-Unity渲染管线介绍

Unity中的渲染管线渲染场景主要分为三个阶段 剔除&#xff08;Culling&#xff09; 剔除摄像机不可见对象&#xff08;视锥体剔除Frustum Culling&#xff09;和被遮挡对象&#xff08;遮挡剔除Occlusion Culling&#xff09;。 渲染&#xff08;Rendering&#xff09; 将可见…...

junit mockito service

service类单元测试可以有两种方式 1、使用Autowired启用上下文的Bean走业务逻辑&#xff0c;适用于debug调试 2、使用InjectMocks不启用上下文依懒的Bean采用打桩的形式 打桩注意&#xff1a;service通常业务逻辑复杂&#xff0c;Bean的依懒层次可能很深&#xff0c;初用者常…...

k8s学习——升级后的k8s使用私有harbor仓库

升级后的k8s使用了第三方的容器管理器&#xff0c;安装了nerdctl工具来替代docker进行镜像管理。但是使用docker build打包并上传至harbor仓库的镜像&#xff0c;在部署过程中始终拉不下来&#xff0c;报错证书错误。通过journalctl -xe |grep kubelet 或 journalctl -xe |grep…...

Blender4.2版本正式上线,新版本的5个主要功能!

​Blender刚刚推出了备受瞩目的 Blender 4.2 版本&#xff0c;这款软件专为那些在视觉特效、动画制作、游戏开发和可视化设计领域工作的艺术家们量身打造。作为最新的长期稳定更新&#xff0c;Blender 4.2 不仅稳定可靠&#xff0c;还引入了备受期待的“Eevee Next”实时渲染引…...

【python基础】基本数据类型

文章目录 一. Python基本数据类型1. 整数1.1. python的四种进制1.2. 数中的下划线 2. 浮点数3. 复数4. 布尔型5. 运算符5.1. 算术运算符5.2. 比较运算符5.3. 逻辑运算符5.4 运算符优先级 6. 常量 二. 注释三. Python之禅 一. Python基本数据类型 1. 整数 无长度限制&#xff1…...

应用层——HTTP

像我们电脑和手机使用的应用软件就是在应用层写的&#xff0c;当我们的数据需要传输的时候换将数据传递到传输层。 应用层专门给用户提供应用功能&#xff0c;比如HTTP,FTP… 我们程序员写的一个个解决我们实际的问题都在应用层&#xff0c;我们今天来聊一聊HTTP。 协议 协议…...

剧本杀小程序搭建,为商家带来新的收益方向

近几年&#xff0c;剧本杀游戏成为了游戏市场的一匹黑马&#xff0c;受到了不少年轻玩家的欢迎。随着信息技术的快速发展&#xff0c;传统的剧本杀门店已经无法满足游戏玩家日益增长的需求&#xff0c;因此&#xff0c;剧本杀市场开始向线上模式发展&#xff0c;实现行业数字化…...

十六、【机器学习】【监督学习】- 支持向量回归 (SVR)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...

基于FPGA的多路选择器

目录 一、组合逻辑 二、多路选择器简介&#xff1a; 三、实战演练 摘要&#xff1a;本实验设计并实现了一个简单的多路选择器&#xff0c;文章后附工程代码 一、组合逻辑 组合逻辑是VerilogHDL设计中的一个重要组成部分。从电路本质上讲&#xff0c;组合逻辑电路的特点是输…...

面经学习(杭州实在智能实习)

个人评价 秃狼觉得本次的面试是有史以来难度最大的&#xff0c;问了很多陌生的八股文&#xff0c;项目问的比较少&#xff0c;估计是项目本来就没有什么亮点&#xff0c;也是第一次被面试官说菜的面试。不过在后续的学习上还是收获颇丰的。 1.说说你在实习中遇到的难点吧&…...

mysql、oracle、db2数据库连接参数

mysql、oracle、db2数据库连接参数 参数/数据库driverurlMysqlcom.mysql.jdbc.Driver 或 com.mysql.cj.jdbc.Driverjdbc:mysql://localhost:3306/数据库名Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:localhost:1521:orcl 注&#xff1a;orcl为数据库SIDDB2com.ib…...

redis缓存击穿和缓存穿透的封装、缓存更新的CacheAside方案、数据预热

redis缓存击穿和缓存穿透的封装 一、首先是互斥锁二、封装为工具类三、调用四、数据预热五、缓存更新的CacheAside方案 &#xff08;来源黑马redis&#xff09; 一、首先是互斥锁 //拿到锁private boolean tryLock(String key) {Boolean flag stringRedisTemplate.opsForValue…...

ArcGIS Pro SDK (九)几何 5 多边形

ArcGIS Pro SDK &#xff08;九&#xff09;几何 5 多边形 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 5 多边形1 构造多边形 - 从映射点的枚举2 构造多边形 - 从包络3 获取多边形的点4 获取多边形的各个部分5 枚举多边形的各个部分6 获取多边形的线段7 构建圆环…...

Docker 镜像使用和安装

​ 1、简介 Docker是一个开源的应用容器引擎&#xff1b;是一个轻量级容器技术&#xff1b; Docker支持将软件编译成一个镜像&#xff1b;然后在镜像中各种软件做好配置&#xff0c;将镜像发布出去&#xff0c;其他使用者可以直接使用这个镜像&#xff1b; 运行中的这个镜像…...

JAVA:Filer过滤器+案例:请求IP访问限制和请求返回值修改

JAVA&#xff1a;Filer过滤器 介绍 Java中的Filter也被称为过滤器&#xff0c;它是Servlet技术的一部分&#xff0c;用于在web服务器上拦截请求和响应&#xff0c;以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求&#xff0c;也可以利用Filter对访问请求…...

FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)

路径操作的高级配置 OpenAPI 的 operationId from fastapi import FastAPIapp FastAPI()# 通过 operation_id 参数设置 app.get("/items/", operation_id"some_specific_id_you_define") async def read_items():return [{"item_id": "F…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...