使用xsd验证xml格式的正确性

news2024/11/15 15:45:34

1.1 基础知识介绍

  • XML简介:XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。xml文件、xml消息。
  • XSD简介:是XML Schema Description的缩写,描述XML的结构,以验证XML是否符合要求。编写直接使用xml语言,无需学习新语言,描述了可能出现的元素、属性和值等。

1.2 XSD的核心组件

元素和属性定义:如何定义元素和属性,包括简单类型和复杂类型。

  • element – 定义普通元素,类型为内置类型(xs:string\xs:date\xs:decimal\xs:integer\xs:boolean\xs:time)
  • simpleType – 在普通类型基础上,有其余额外的格式要求(通过xs:restriction来限定,后面会详细说明限定如何设置)
  • complexType – 含有多个子元素(xs:sequence–子元素必须按顺序出现,默认只出现一次,可通过minOccurs/maxOccurs设置出现次数)

student.xml:

<students>
    <class>Grade one of high school</class>
    <student>
        <name>test1</name>
        <age>16</age>
    </student>
    <student>
        <name>test2</name>
        <age>15</age>
    </student>
</students>

class – 为element 简易元素
name – 为simpleType,名字格式有特殊要求,必须是test开头+数字
student – 为compleType,含有多个子元素,且可出现1次至无数次
student.xsd:

<?xml version="1.0" encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="students">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="class" type="xs:string"/>
                <xs:element name='student' maxOccurs='unbounded'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='name'>
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:pattern value='test\d{1,}'/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="age" type="xs:integer"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
  • 模型组:介绍xs:sequence, xs:choice, xs:all等模型组的使用和区别。
    • xs:sequence:用于定义一组元素,这些元素必须按照在 xs:sequence 中声明的顺序出现在XML文档中。
    • xs:choice:允许在其子元素中选择一个出现。只能选择其中一个。
    • xs:all:允许其子元素以任何顺序出现,每个元素最多出现一次。这适用于元素的顺序不重要的情况。但子元素不能是复杂元素。
  • 数据类型:内置数据类型和用户自定义数据类型的使用。
    • 常用的内置数据类型:
      • xs:string
      • xs:decimal
      • xs:integer
      • xs:boolean
      • xs:date
      • xs:time
    • 用户自定义类型:xs:restriction限定。
      • enumeration 定义可接受值列表
<?xml version="1.0" encoding='utf-8'?>
<!-- 性别元素的值只能是男或女 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="gender">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            <xs:enumeration value=''/>
            <xs:enumeration value=''/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • fractionDigits 指定允许的最大小数位数。必须大于或等于零
<?xml version="1.0" encoding='utf-8'?>
<!-- 体重元素,最多2位小数位  -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='weight'>
        <xs:simpleType>
            <xs:restriction base='xs:decimal'>
                <xs:fractionDigits value='2'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
- length 指定允许的精确字符数或列表项数。必须大于或等于零
<?xml version="1.0" encoding='utf-8'?>
<!-- 学号元素,长度必须为10位数  -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='studentid'>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:length value='10'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • maxExclusive 指定数值的上界(值必须小于此值)
<?xml version="1.0" encoding='utf-8'?>
<!-- 分数元素,最大值为150,整数位至少1位,至多3位,小数位至多2位,小数位可以没有 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='score'>
        <xs:simpleType>
            <xs:restriction base="xs:decimal">
                <xs:maxExclusive value='151'/>
                <xs:pattern value='\d{1,3}.?\d{0,2}'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • maxInclusive 指定数值的上限(值必须小于或等于此值)
<?xml version="1.0" encoding='utf-8'?>
<!-- 分数元素,最大值为150,整数位至少1位,至多3位,小数位至多2位,小数位可以没有 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='score'>
        <xs:simpleType>
            <xs:restriction base="xs:decimal">
                <xs:maxInclusive value='150'/>
                <xs:pattern value='\d{1,3}.?\d{0,2}'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • maxLength 指定允许的最大字符数或列表项数。必须大于或等于零
<?xml version="1.0" encoding='utf-8'?>
<!-- 座右铭元素,最长字符数限制为100字符 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='motto'>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value='100'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • minExclusive 指定数值的下界(值必须大于此值)
<?xml version="1.0" encoding='utf-8'?>
<!-- 分数元素,最小值为0,最大值为150,整数位至少1位,至多3位,小数位至多2位,小数位可以没有 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='score'>
        <xs:simpleType>
            <xs:restriction base="xs:decimal">
                <xs:minExclusive value='-1'/>
                <xs:maxInclusive value='150'/>
                <xs:pattern value='\d{1,3}.?\d{0,2}'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • minInclusive 指定数值的下限(值必须大于或等于此值)
<?xml version="1.0" encoding='utf-8'?>
<!-- 分数元素,最小值为0,最大值为150,整数位至少1位,至多3位,小数位至多2位,小数位可以没有 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='score'>
        <xs:simpleType>
            <xs:restriction base="xs:decimal">
                <xs:minInclusive value='0'/>
                <xs:maxInclusive value='150'/>
                <xs:pattern value='\d{1,3}.?\d{0,2}'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • minLength 指定允许的最小字符数或列表项数。必须大于或等于零
<?xml version="1.0" encoding='utf-8'?>
<!-- 座右铭元素,最短为1个字符,最长字符数限制为100字符 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='motto'>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value='1'/>
                <xs:maxLength value='100'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • pattern 定义可接受的确切字符序列
<?xml version="1.0" encoding='utf-8'?>
<!-- 性别元素的值只能是男或女 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="gender">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            <xs:pattern value='[男|女]'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • totalDigits 指定允许的精确数字数。必须大于零
<?xml version="1.0" encoding='utf-8'?>
<!-- 年龄元素的值数字为2位 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="age">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
            <xs:totalDigits value='2'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>
  • whiteSpace 指定如何处理空白字符(换行符、制表符、空格和回车),有三个可能的值:
      1. preserve:保留所有空白字符。这是默认行为,如果不指定 whiteSpace,则XML解析器会保留输入中的所有空白。
      1. replace:将所有空白字符替换为普通空格。这包括将制表符、换行符和回车符替换为空格。
      1. collapse:首先将所有空白字符替换为普通空格,然后合并连续的空格为一个空格,并删除字符串开头和结尾的空格。
<?xml version="1.0" encoding='utf-8'?>
<!-- 座右铭元素,最短为1个字符,最长字符数限制为100字符,并且限定前后不能有空格,中间不能换行 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='motto'>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value='1'/>
                <xs:maxLength value='100'/>
                <xs:whiteSpace value='collapse'/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

1.3 高级XSD特性

继承和多态:使用xs:extension和xs:restriction进行类型扩展和限制。

  • xs:extension:在基础类型上新增新的元素。eg: 在基础c_student类型上,新增gender元素。
<?xml version="1.0" encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="c_student">
        <xs:sequence>
            <xs:element name='name'>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value='test\d{1,}'/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="age" type="xs:integer"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name='student'>
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base='c_student'>
                    <xs:sequence>
                        <xs:element name="gender">
                            <xs:simpleType>
                                <xs:restriction base="xs:string">
                                <xs:pattern value='[男|女]'/>
                                </xs:restriction>
                            </xs:simpleType>
                        </xs:element>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
</xs:schema>
  • xs:restriction:修改已存在的元素的值,必须重新对所有元素定义。eg: 对基础类型c_student的age设置默认值16.
<?xml version="1.0" encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="c_student">
        <xs:sequence>
            <xs:element name='name'>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value='test\d{1,}'/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="age" type="xs:integer"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name='student'>
        <xs:complexType>
            <xs:complexContent>
                <xs:restriction base='c_student'>
                    <xs:sequence>
                        <xs:element name='name'>
                            <xs:simpleType>
                                <xs:restriction base="xs:string">
                                    <xs:pattern value='test\d{1,}'/>
                                </xs:restriction>
                            </xs:simpleType>
                        </xs:element>
                        <xs:element name="age" type="xs:integer" default='16'/>
                    </xs:sequence>
                </xs:restriction>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
</xs:schema>
  • 文件引用:xs:import 和xs:include进行文件间的引用。
    • xs:include:命名空间相同的两个文件,可以使用include引用另一个xsd文件的定义元素和类型。

base.xsd

<?xml version="1.0" encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace='basic.type'>
    <xs:simpleType name="t_name">
        <xs:restriction base="xs:string">
            <xs:pattern value='test\d{1,}'/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="t_gender">
        <xs:restriction base="xs:string">
        <xs:enumeration value=''/>
        <xs:enumeration value=''/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name='t_studentid'>
        <xs:restriction base="xs:string">
            <xs:length value='10'/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name='t_motto'>
        <xs:restriction base="xs:string">
            <xs:minLength value='1'/>
            <xs:maxLength value='100'/>
            <xs:whiteSpace value='collapse'/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="t_age">
        <xs:restriction base="xs:integer">
        <xs:totalDigits value='2'/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

fat_student.xsd:命名空间设置成和basic.xsd一致。与base.xsd放在同一目录下。

<?xml version="1.0" encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prd='basic.type' targetNamespace='basic.type'>
    <xs:include schemaLocation="base.xsd"/>
    <xs:element name="students">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="student" maxOccurs='unbounded'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="prd:t_name"/>
                            <xs:element name='age' type="prd:t_age"/>
                            <xs:element name='studentid' type="prd:t_studentid"/>
                            <xs:element name='gender' type="prd:t_gender"/>
                            <xs:element name='motto' type="prd:t_motto"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
  • xs:import:命名空间不相同的两个文件,可以使用import引用,并使用namespace指明引用文件的命名空间名。

fat_student2.xsd:不指定该xsd的命名空间或命名空间设置成和base.xsd不一致。与base.xsd放在同一目录下。

<?xml version="1.0" encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prd='basic.type'>
    <xs:import namespace='basic.type' schemaLocation='base.xsd'/>
    <xs:element name="students">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="student" maxOccurs='unbounded'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="prd:t_name"/>
                            <xs:element name='age' type="prd:t_age"/>
                            <xs:element name='studentid' type="prd:t_studentid"/>
                            <xs:element name='gender' type="prd:t_gender"/>
                            <xs:element name='motto' type="prd:t_motto"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

注:如果需要引入多个xsd,可以加多几个include或import节点。

1.4 python中使用XSD验证XML

1.4.1 传入xml文件的路径:

import lxml.etree as ET

def validateXMLByXSD(file_xml, file_xsd):
        """ Verify that the XML compliance with XSD
        Arguments:
            1. file_xml: Input xml file
            2. file_xsd: xsd file which needs to be validated against xml
        Return:
            No return value
        """
        try:
            print("Validating:{0}".format(file_xml))
            print("xsd_file:{0}".format(file_xsd))
            xml_doc = ET.parse(file_xml)
            xsd_doc = ET.parse(file_xsd)
            xmlschema = ET.XMLSchema(xsd_doc)
            xmlschema.assert_(xml_doc)
            return True

        except ET.XMLSyntaxError as err:
            print("PARSING ERROR:{0}".format(err))
            return False

        except AssertionError as err:
            print("Incorrect XML schema: {0}".format(err))
            return False

if __name__ == '__main__':
    print(validateXMLByXSD('xml文件路径', 'xsd文件路径'))

1.4.2 传入xml字符串:

import lxml.etree as ET

def validateXMLByXSD(str_xml, file_xsd):
        """ Verify that the XML compliance with XSD
        Arguments:
            1. str_xml: Input xml string
            2. file_xsd: xsd file which needs to be validated against xml
        Return:
            No return value
        """
        try:
            print("Validating:{0}".format(str_xml))
            print("xsd_file:{0}".format(file_xsd))
            xml_doc = ET.fromstring(str_xml)
            xsd_doc = ET.parse(file_xsd)
            xmlschema = ET.XMLSchema(xsd_doc)
            xmlschema.assert_(xml_doc)
            return True

        except ET.XMLSyntaxError as err:
            print("PARSING ERROR:{0}".format(err))
            return False

        except AssertionError as err:
            print("Incorrect XML schema: {0}".format(err))
            return False

if __name__ == '__main__':
    print(validateXMLByXSD('xml字符串', 'xsd文件路径'))

1.5 实战演练

①使用student.xsd验证student.xml的正确性:

  • 不修改上述student.xml和student.xsd文件内容,直接使用1.4.1中代码验证。
    在这里插入图片描述

  • 修改student.xml文件内容age为非数字:
    在这里插入图片描述

  • 删掉student.xsd中maxOccurs的配置,故student元素仅能出现一次:
    在这里插入图片描述

②使用fat_student2.xsd验证student2.xml的正确性:

student2.xml
<students>
    <student>
        <name>test1</name>
        <age>16</age>
        <studentid>1000000001</studentid>
        <gender></gender>
        <motto>努力会有回报的。</motto>
    </student>
    <student>
        <name>test2</name>
        <age>17</age>
        <studentid>1000000002</studentid>
        <gender></gender>
        <motto>勤奋。</motto>
    </student>
</students>

在这里插入图片描述

studentid不符合长度要求
在这里插入图片描述

缺少gender节点:
在这里插入图片描述

其他:

1.当xml的根元素没有设置命名空间时,对应的xsd也不能设置命名空间targetNamespace,不会assert时会报错。
2.可以使用fixed固化某个元素的值,和default用法一致。
3.该方式验证xml格式正确性,轻代码重xsd配置,但也有好处,当xml格式发生改变时,无需修改代码,只需要对应修改xsd即可,且相对代码来说,易上手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS对象超细

目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 &#xff08;1&#xff09;查 &#xff08;2&#xff09;改 &#xff08;3&#xff09;增 &#xff08;4&#xff09;删&#xff08;了解&#xff09; &#xff08;5&#xf…

九州未来十二周年丨聚力同行,奔赴智能新未来

九州未来迎来十二周年&#xff01; 从国内首批提供 OpenStack 云服务的专业公司&#xff0c; 经过十二年的发展&#xff0c; 现今成长为开放智能云边架构引领者。 在这十二年的时间中&#xff0c; 九州未来持续创新&#xff0c;步履不停&#xff0c; 打造成熟的云基础设施…

【软件测试】软件测试基础理论

目录 软件测试简介软件产生过程小结 主流测试掌握技能功能测试功能测试的注意事项 自动化测试自动化测试的优势自动化测试的限制和适用性&#xff1a;自动化测试的注意事项 接口测试接口测试通常可以涵盖以下方面接口测试的注意事项 性能测试性能测试的几个方面性能测试的注意事…

JavaSE:Clonable接口、浅拷贝与深拷贝

1、引言 我们在学习的数组时&#xff0c;就了解到了数组克隆方法&#xff0c;可以通过数组克隆方法来拷贝一个一模一样的数组&#xff1a; 那对于自定义类型中有没有克隆方法呢&#xff1f;答案是有的&#xff01; 就让这篇文章来帮助大家学习自定义类型的拷贝&#xff01; …

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展&#xff0c;表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

docker redis 持久化

1、拉取redis镜像 docker pull redis:latest 2、 mkdir /data/redis 3、填充redis.conf文件及根据需求修改相应的配置 •通过官网地址找到对应版本的配置文件 •将配置信息复制到redis.conf中 •常见的修改配置 https://redis.io/docs/latest/operate/oss_and_stack/managem…

K8s 高级调度

文章目录 K8s 高级调度CronJobinitContainerTaint 和 Toleration污点&#xff08;Taint&#xff09;容忍&#xff08;Toleration&#xff09; AffinityNodeAffinityPodAnffinity 和 PodAntiAffinity 总结 K8s 高级调度 CronJob 在 k8s 中周期性运行计划任务&#xff0c;与 li…

获取支持Windows7的最新Edge离线版本

从110版本开始&#xff0c;微软Edge和谷歌停止了对Win7、Win8/8.1的支持&#xff0c;后续又发布了几版安全更新&#xff0c;截止目前为止&#xff0c;能支持Win7的版本是 109.0.1518.140。 如果你想用最新版本谷歌浏览器&#xff0c;可以考虑下Supermium&#xff0c;这个浏览器…

Flask CORS: 解决跨域资源共享问题的利器

文章目录 安装和启用 CORS配置 CORS拓展 在本文中&#xff0c;我们介绍了如何使用 Flask-CORS 扩展来解决跨域问题。Flask-CORS 是一个方便的工具&#xff0c;可以帮助我们轻松地实现跨域资源共享支持。 安装和启用 CORS 要开始使用 Flask-CORS&#xff0c;我们需要先安装它。…

一些常见的程序设计问题

秒杀 redis缓存库存 1.判断库存名额是否充足&#xff0c;2.进行扣减 为了防止超卖&#xff0c;必须保证这两部的原子性 库存扣减后发送mq消息&#xff0c;去异步执行创建订单流程&#xff0c;创建订单失败会造成少卖。可加重试机制&#xff0c;对多次重试依旧失败的&#xff…

react 函数组件 开发模式默认被渲染两次

这是 React 刻意为之&#xff0c;函数式组件应当遵从函数式编程风格&#xff0c;每次执行应该是无副作用的(no sideEffect)&#xff0c;在 dev 下多次渲染组件&#xff0c;是为了防止开发者写出有问题的代码。 用 React 写函数组件&#xff0c;如何避免重复渲染&#xff1f; -…

【BUG】流式响应requests得到: ping - 和时间戳

前情提要 运行Langchain-Chatchat项目&#xff0c;使用自定义请求访问API Server流式输出 报错展示 b: ping - 2024-05-22 00:46:04.83252000:00\r\n\r\n报错原因 这通常是由于 Server-Sent Events (SSE) 实现中使用的“心跳”机制&#xff0c;以确保连接保持活跃。一些 SSE…

使用python实现socket进行消息传输-demo

Socket 是什么 Socket 是一种在计算机网络中用于实现进程间通信的一种机制。它是网络编程中的重要概念&#xff0c;通过它可以在不同的计算机之间进行数据传输和通信。Socket 可以用于实现各种网络应用&#xff0c;包括客户端-服务器模型、P2P 应用等。基本上&#xff0c;Sock…

新零售数据中台:构建零售业高效率、智能化的数据处理平台_光点科技

随着互联网技术的快速发展和移动支付、大数据等技术的广泛应用&#xff0c;零售行业已经逐渐从传统零售向新零售模式转变。在这个变革的时代背景下&#xff0c;新零售数据中台应运而生&#xff0c;它作为零售行业数据资源的整合与智能分析的核心载体&#xff0c;成为推动零售行…

基于消息中间件的异步通信机制在系统解耦中的优化与实现

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

重生之我要精通JAVA--第五周笔记

文章目录 APIJDK7时间Date时间类CalendarSimpleDateFormat 类SimpleDateFormat 类作用 JDK8时间Zoneld时区 包装类Integer成员方法 Arrays Lambda表达式标准格式注意点好处省略写法 集合进阶Collection迭代器遍历Collection集合获取迭代器Iterator中的常用方法细节注意点 增强f…

【软考中级 软件设计师】计算机网络和安全

计算机网络和安全是软件设计师&#xff08;软考中级&#xff09;考试中的重要组成部分&#xff0c;它涵盖了网络基础、网络协议、网络架构、网络安全等多个方面。以下是一些核心概念和要点&#xff0c; 计算机网络基础 OSI七层模型&#xff1a;物理层、数据链路层、网络层、传…

【20天拿下Pytorch:Day 7】Dataset和DataLoader

文章目录 1. Dataset和DataLoader概述1.1 概要1.2 获取一个batch数据的步骤1.3 Dataset和DataLoader的功能分工1.4 Dataset和DataLoader的主要接口 2. 使用Dataset创建数据集2.1 根据Tensor创建数据集2.2 根据图片目录创建图片数据集2.3 创建自定义数据集 3. 使用DataLoader加载…

C++ TCP发送Socket数据

DEVC需要加入ws2_32库 #include <iostream> #include <winsock2.h>#pragma comment(lib, "ws2_32.lib")void sendData(const char* ip, int port, const char* data) {WSADATA wsaData;SOCKET sockfd;struct sockaddr_in server_addr;// 初始化Winsock…

打气球小游戏

1.气球往上飘 我们声明两个符号常量来作为窗体的长和宽,接着就是常规操作 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600#include<easyx.h> #include<stdio.h> int main() {initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();get…