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

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言

主要内容(了解即可)

1.XML介绍

2.DTD

3.XSD

4.DOM解析

6.SAX解析

学习目标

image-20240916095028616

一. XML介绍

1.简介

XML(Extensible Markup Language) 可扩展标记语言,严格区分大小写

2.XML和HTML

XML是用来传输和存储数据的。

XML多用在框架的配置文件中

XML大多平台都支持,所以可以实现跨平台数据传输

HTML是用来显示数据的

3.XML的引入

XML的引入:

保存5个学生对象的信息(持久化保存)

A、保存数组/集合====>内存中当项目重启后我们保存到内存中数据就会丢失

B、使用IO流保存到文件中优点:实现数据的持久化保存缺点:保存数据比较麻烦,并且保存的对象值我们看不懂

C、使用XML进行数据的保存
[1]进行数据的存储(数据存储的功能就在这个阶段使用,以后不用xmL进行数据存储)
[2]在我们后期学习(javaEE/框架)中充当配置文件
D、数据库(最终数据存储位置)

4.语法

<元素名 属性名=“属性值”>文本内容</元素名>。

前后元素名相同,元素名自定义。

每个元素可以有0到多个属性,属性名自定义。

文本内容表示文字。

支持嵌套结构。

结束时元素名前有/。

5.语法要求

XML的语法和HTML语法是差不多的,但是比HTML要求更加严格。

1.元素正确嵌套

2.XML文件的第一行必须是xml声明

3.只能有一个根节点

4.严格区分大小写

5.结束标签必须包含/

6.属性值的设置必须被包围起来

7.XML认为换行标记也属于文本节点

8.<!---->注释。有的非官方资料认为这是注释节点。

<?xml version="1.0" encoding="utf-8"?> <!--文档头,声明版本和编码 -->
<students> <!--在xml中只可以定义一个根节点,并且是一个双标签--><student id="1"> <!--属性节点--><name>张三</name><age>12</age> <!--元素节点--><score>88</score><!-- 文本内容/文本值节点--></student><student id="2"><name>李四</name><age>13</age><score>99</score></student>
</students>

6.特殊符号

6.1 实体符号
字符实体特殊字符含义
&It<小于
&gt>大于
&amp&和号
&apos单引号
&quot"双引号
6.2 转义标签
<font style='color:blue'> <![CDATA[要打印内容]] </font>

二,小节实现案例-编写XML文件

1.需求

项目根路径下创建product.xml并存储下面信息。

根节点叫做products,里面包含3个product元素。每个元素里面又包含下面的元素及文本内容

image-20240916103934692

2.实现

<?xml version="1.0" encoding="utf-8" ?> <!--xml的文档声明-->
<products><product><id>P001</id><name>蜘蛛王皮鞋</name><price>268</price><color>黑色</color><size>42</size><num>500</num>
</product><!-- ... -->
</products>

三.DTD(约束)

1.简介

DTD(Document Type Definition) 文档类型定义

即约束XML文件中可以包含哪些元素、哪些属性、及元素个数和元素之间的关系和元素的顺序。

在包含DTD的XML文件中,如果XML内容不满足DTD要求,会提示错误。

2.分类

DTD的三种分类:

1.内部DTD

2.外部DTD

3.公共DTD

2.1内部DTD

直接在XML中编写DTD内容。不推荐。

  1. <!ELEMENT元素名(包含内容)>内容可以是其他标签,也可以是#PCDATA文本内容。
  2. <!ATTLIST元素名属性名CDATA内容控制>定义属性
  3. 内容控制可取值:
    1. #REQUIRED必须有这个属性
    2. #IMPLIED可以有也可以没有

​ 3. #FIXED“内容”必须取固定值

  1. (name,age,score)表示顺序必须是先name,后age,然后score

  2. student+表示student至少出现一次。括号内容的元素名都可以跟下面符号
    1.?表示子元素出现0次到1次(最多出现一次)

    2.+表示子元素至少出现一次(至少出现一次)

    3.*表示子元素可以出现0到多次(任意)

<?xml version="1.0" encoding="UTF-8"> <!--声明xm1文档头
<!-- 内部DTD约束 -->
<!--!DOCTYPE: 固定语法文档类型students: 自定义根标签名字[]: 存放子标签ELEMENT: 元素(标签)#PCDATA:元素是字符串类型#PCDATA(不能再有子元素,也不能为空)DTD中标签的顺序就是日后使用的顺序,不允许改变
-->
<!DOCTYPE students [<!-- 标签 --><!--(student): 只能有一对student标签(student?): 0~1次(student+): 至少1次(student*): 0~多次--><!ELEMENT students (student*)><!ELEMENT student (name, age, sex)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT SeX (#PCDATA)><!--属性--><!-- ATTLIST: 属性student: 哪个标签指定属性id: 指定的属性名CDATA: 属性控制#REQUIRED: 必须有#FIXED“值": 固定值#IMPLIED: 可有可无--><!ATTLIST student id CDATA #REQUIRED><!ATTLIST name class CDATA #FIXED"qwe"><!ATTLIST age test CDATA #IMPLIED>
]>
<students><student id="aa"><name class="qwe">张三</name><age test="aaa">18</age><sex></sex></student>
</students>
2.2外部DTD(项目配置文件来源于此!!!)

外部DTD是我们自己编写的DTD文件。通过引I入方式引I入DTD。

在外部创建一个xxx.dtd文件,文件内容和内部dtd[]中的内容相同。

1.新建dtd文件
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT SeX(#PCDATA)>
<!ATTLIST student id CDATA #REQUIRED>
<!ATTLIST name class CDATA #FIXED "qwe">
<!ATTLIST age test CDATA #IMPLIED>
2.xml引入外部dtd文件
<?xml version="1.0" encoding="uTF-8" ?>
<!DOCTYPE students SYSTEM "aa.dtd">
<students><student id="aa"<name class="qwe">张三</name><age test="aaa">18</age><sex></sex></student>
</students>
2.3公共DTD

公共DTD是一些开源组织编写的DTD,并且已经发布到互联网中。
公共DTD语法:
< !DOCTYPE 根元素 PUBLIC “DTD标识名” “公用DTD的URI”>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">

3, 总结

DTD是较简单的语法检查机制。整体语法较简单,功能较单一。
当需要对XML文件结构更新时,需要修改整个DTD文件,不够灵活。

四, XSD

1.简介

XSD(XML Schema Definition)XML模式定义。

属于DTD的升级版。完美的解决了DTD使用时不易扩展问题,并且提供了更强大功能。

2.定义XSD

新建xxx.xsd。

所有需要的元素,属性都需要被定义。

<!--声明xsd约束aa: 自定义名称(随意)schema: 约束(固定)
-->
<aa:schema xmlns:aa="http://www.w3.org/2001/XMLSchema"><!--aa:element: 标签name: 标签名--><aa:element name="students"><!--必须设置为复杂类型--><aa:complexType><!--在此标签中规范了标签的顺序<aa:sequence><!--引用其他标签 --><!--maxoccurs: 指定可以有多少个标签--><aa:element ref="student"maxoccurs="2"/></aa:sequence></aa:complexType></aa:element>
<aa:element name="student"><!--复杂类型可以指定 包含的标签 属性--><aa:complexType><aa:sequence><!--type: 值的类型--><aa:element name="name" type="aa:string"/><aa:element name="age" type="aa:int"/><aa:element name="sex" type="aa:boolean"/></aa:sequence><!--use:属性的设置required: 必须存在prohibited: 禁用optional: 可选的fixed="值": 固定值--><aa:attribute name="id" use="optional" fixed="aa"/></aa:complexType>
</aa:element>

3.引用xsd

<?xml version="1.0" encoding="uTF-8" ?>
<students xm1ns:xsi="http://www.w3.org/2001/xMLSchema-instance"xsi:noNamespaceSchemaLocation="s.xsd"><student id="aa"><name></name><age>11</age><sex>false</sex></student>
</students>

五.XML 解析

1.简介

在Java中提供了两种XML解析方式: DOM、SAX。

2.DOM解析

​ Document Object Model文档对象模型。把XML文件一次性加载到内存中,并转换为树状模型。然后一个节点一个节点的解析,这种解析方式效率较高,但是比较消耗内存,适用于小型XML文档。

image-20240916140617102

3.SAX(Spring)

SAX(SimpleAPIforXML)解析:是基于事件的解析,它是为了解决DOM解析的资源耗费而出现的。SAX在解析一份XML文档时,会依次出发文档开始、元素开始、元素结束、文档结束等事件,应用程序通过监听解析过程中所触发的事件即可获取XML文档的内容。该方式不需要事先调入整个文档,优势是占用资源少,内存消耗小,一般在解析数据量较大的文档是采用该方式。

六.DOM解析

1.简介

DOM解析所有API都是org.w3c包中。

使用DOM操作XML按照标准树状结构一层一层解析。

解析器是基于工厂设计模式的。当获取到文档对象后每个元素都是一个节点,然后操作节点对象。

在DOM解析时,每个换行符都是一个文本节点,所以一定要过滤掉换行。

image-20240916140952399

2.代码示例

以上面的students作为xml进行解析。

已知XML文件就三层结构,所以直接使用循环进行解析。如果XML文档结构比较深,此处需要使用递归。

public class TestDoM {public static void main(String[] args) throws Exception {parse();}//使用DoM解析XMLpublic static void parse() throws ParserConfigurationException, IoException, SAXException {//1.获取document构建 工厂对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//2.根据文档构建工厂获取文档构建对象/* 将xm1变为document* 手动的创建document**/  DocumentBuilder db = dbf.newDocumentBuilder();//3.使用文档构建对象,将xm1解析为document对象Document document = db.parse(new File("stu.xm1"));//4.根据标签名获取跟标签NodeList rootList = document.getElementsByTagName("students");//5.xm1中仅会存在一个跟标签,获取这个根标签Node root = rootList.item(0);System.out.print1n ("根节点名称: " + root.getNodeName();//6.获取标签所有的直接子节点NodeList chi1dNodes = root.getChi1dNodes();for (int i = 0; i < childNodes.getLength(); i++{//7.获取每一个子节点/**	    getNodeType(): 结点类型,常量*	  	1: 标签结点*	 	2: 属性结点*		3: 文本结点**/Node item = childNodes.item(i);if (item.getNodeType() == Node.ELEMENT_NODE) {System.out.println("子节点名称: " + item.getNodeName());//8.获取该结点的所有子节点NodeList childNodes1 = item.getChildNodes();发送forint j = 0; j < childNodes1.getLength(); j++) {Node item1 = childNodes1.item(j);if (item1.getNodeType() == Node.ELEMENT_NODE) {System.out.println("子节点名称: " + item1.getNodeName() + ":" + item1.getTextContent()));}}}}      }    }

七.使用DOM生成XML

1.简介

DOM生成XML时主要是创建节点。然后把节点添加到上层节点。

2.代码示例

public class TestDoM {public static void main(String[] args)throws Exception {transform();}//先构建文档,再将文档变为xmlpublic static void transform throws ParserConfigurationException, TransformerException, FileNotFoundException{//1.获取文档构建器工厂对象DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//2.构建器工厂对象 获取 构建器对象DocumentBuilder db=dbf.newDocumentBuilder();//3.创建文档对象Document document=db.newDocument();//4.创建teachers标签Element teachers=document.createElement("teachers");//5.创建teacher标签Element teacher =document.createElement("teacher");teacher.setAttribute("id","tea");//设置属性//6.创建name标签Element name =document.createElement("name");name.setAttribute("class", "na"); // 设置属性name.setTextContent("zs");//7.创建age标签Element age = document.createElement("age");age.setTextContent("18");//8.创建sex标签Element sex = document.createElement("sex");sex.setTextContent("男");//9.设置标签之间的关系//添加teacher的子标签*teacher.appendchild(name);teacher.appendchild(age);teacher.appendchild(sex);}
}    

八.SAX解析

1.简介

SAX解析是基于事件模型完成的。所有的API都在org.Xml中。
SAX解析时也会识别换行为文本节点,这个坑一定躲避。

2.代码示例

public class TestSAX {public static void main(String[] args) throws Exception {parse();}public static void parse() throws Exception {//1.SAX解析器工厂对象SAXParserFactory spf = SAXParserFactory.newInstance();//2.基于工厂对象获取解析器对象SAXParser sp = spf.newSAxParser();//3.使用解析器解析xmlsp.parse(new File("java_day13/teacher.xm1"),new MyHandler());}public class MyHandler extends DefaultHandler {String name = null;@overridepublic void startDocument() throws SAXException {System.out.print1n("文档开始解析");}@overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {System.out.println("开始解析,标签名: " + qName);name = qName;}@Override}     
}

九, SAX生成

1.简介

SAX生成XML和手写XML比较相似。

也是在调用5个操作方法。

2.代码生成

public class TestSAX {public static void main(String[] args) throws Exception {parse();}public void transfom() throws TransformerConfigurationException, FileNotFoundExceptionSAxException {//1.创建转换器工厂SAXTransformerFactory stff =(SAXTransformerFactory) SAXTransformerFactory.newInstance();//2.根据工厂获取转换器/**传输*创建xml**/ TransformerHandler th = stff.newTransformerHandler();Transformer transformer = th.getTransformer();transformer.setOutputProperty(OutputKeys.INDENT,"yes");transformer.setOutputProperty(OutputKeys.ENcoDING,"utf-8");transformer.setoutputProperty("{http://xml.apache.org/xslt}indent-amount","2");th.setResult(new StreamResult(new FileoutputStream("stu.xml")));th.startElement(null,null,“students",null);AttributesImpl attributes = new AttributesImpl();attributes.addAttribute(nullnull,“id",null,“aa");th.startElement(nullnull"student",attributes);th.startElement(null, null, "name", null);char[] chars = "zs".tocharArray();th.characters(chars,0,chars.length);th.endElement(null, null, "name");th.startElement(null, null,"age", null1);char[] chars1 = "19".toCharArray();th.characters(chars1,0,chars1.1ength);th.endElement(null, null, "age");th.startElement(null, null, “sex", null);char[] chars2 ="男".tocharArray();th.characters(chars2,0,chars2.length);th.endelement(null, null,"sex");th.endElement(null,null,“student");th.endelement(null,null,“students");th.endDocument();}
}

相关文章:

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言&#xff0c;严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…...

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…...

PCL 点云中的植被信息提取(C++详细过程版)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年9月18日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、原理概述 点云具有丰富的色彩信息,可以与植被指数结合使…...

requests-html的具体使用方法有哪些?

‌requests-html是一个功能强大的Python库&#xff0c;用于发送HTTP请求和解析HTML内容。它的使用方法包括安装库、基本使用、发送带有参数的请求、图片抓取实战案例、解析网页内容、执行JavaScript代码、使用CSS选择器来查找元素、继续跟踪链接并获取内容等。‌ ‌安装request…...

YOLOv9改进策略【卷积层】| AKConv: 具有任意采样形状和任意参数数量的卷积核

一、本文介绍 本文记录的是利用AKConv优化YOLOv9的目标检测网络模型。标准卷积操作的卷积运算局限于局部窗口&#xff0c;无法捕获其他位置的信息&#xff0c;且采样形状固定&#xff0c;无法适应不同数据集和位置中目标形状的变化。而AKConv旨在为卷积核提供任意数量的参数和…...

图神经网络池化方法

图神经网络池化方法 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异&#xff…...

小琳AI课堂:确保大语言模型安全的八大策略--从数据隐私到用户教育

大家好&#xff0c;这里是小琳AI课堂。今天我们深入探讨如何保证大语言模型的安全&#xff0c;这可是关系到我们每个人哦&#xff01;&#x1f510; 首先&#xff0c;我们要明白&#xff0c;保证大语言模型的安全&#xff0c;需要从多个方面入手&#xff0c;确保模型在技术、法…...

Python 数学建模——高斯核密度估计

文章目录 前言原理代码实例scipy 实现seaborn 实现 前言 高斯核密度估计本是一种机器学习算法&#xff0c;在数学建模中也可以发挥作用。本文主要讨论用它来拟合变量的概率密度&#xff0c;获得概率密度函数 f ( x ) f(x) f(x)。 原理 已知一个连续型随机变量 X X X 的一系列…...

Flink+Spark相关记录

FlinkSpark相关记录 FlinkSQL Flink Streaming的一些点覆写RichSource、RichSink、RichMap 1.Source自动负载均衡&#xff0c;CDC源端加入一个全局调控的节点监控流量流速 2.Sink并发写入 3.Map与Iterator与增量迭代等用法关于Checkpoint几个用法 1.提交Commit至目的端数据库 2…...

2023 hnust 湖科大 毕业实习 报告+实习鉴定表

2023 hnust 湖科大 毕业实习 报告实习鉴定表 岗位 IT公司机房运维 实习报告 实习鉴定表 常见疑问 hnust 湖科大 毕业实习常见问题30问&#xff08;2021 年7月&#xff0c;V0.9&#xff09;-CSDN博客时间&#xff1a;大四开学第三四周毕业实习23年是企业&#xff08;黑马&am…...

ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案

具体报错&#xff1a; Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘CommissionMapperImpl’ for bean class [com.xxx.mapper.carrier.CommissionMapperImpl] conflicts with existing, non-co…...

如何切换淘宝最新镜像源(npm)【2024版】

在使用 Node.js 和 npm 进行开发时&#xff0c;大家通常会遇到 npm 源速度较慢的问题。特别是当你需要安装大量依赖时&#xff0c;npm 官方源的速度可能不尽如人意。幸运的是&#xff0c;淘宝提供了一个更快速的 npm 镜像源&#xff0c;可以让你更快地下载和安装包。本文将介绍…...

YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)

文章目录 摘要代码详解如何在自己的论文中描述改进方法测试结果总结摘要 本文使用PromptIR框架中的PGM模块来改进YoloV10。PGM(Prompt Generation Module)模块是PromptIR框架中的一个重要组成部分,主要负责生成输入条件化的提示(prompts)。这些提示是一组可学习的参数,它…...

使用rust自制操作系统内核

一、系统简介 本操作系统是一个使用rust语言实现&#xff0c;基于32位的x86CPU的分时操作系统。 项目地址&#xff08;求star&#xff09;&#xff1a;GitHub - CaoGaorong/os-in-rust: 使用rust实现一个操作系统内核 详细文档&#xff1a;自制操作系统 语雀 1. 项目特性 …...

Flink难点和高阶面试题:Flink的状态管理机制如何保证数据处理的准确性和完整性

1 Flink状态管理机制核心要素 1.1 内置状态后端 在Apache Flink中,状态管理机制是确保数据处理准确性与完整性的关键环节。其核心在于灵活且高效的状态后端,这些后端负责在分布式环境中安全地存储和访问状态数据。Flink提供了多种内置状态后端,其中RocksDB和内存状态后端最…...

【激励广告带来的广告收入与用户留存率的双重提升】

激励广告带来的广告收入与用户留存率的双重提升 ) 随着移动应用市场的竞争加剧&#xff0c;如何通过广告变现成为众多开发者关注的焦点。其中&#xff0c;激励广告&#xff08;Rewarded Ads&#xff09;凭借其用户友好、互动性强等特点&#xff0c;逐渐成为开发者的首选。那些…...

指针和引用;内联函数和普通函数

1. 指针和引用 1.1 定义和性质区别 指针是一个变量&#xff0c;只不过这个变量存储的是一个地址&#xff0c;指向内存的一个存储单元&#xff1b;而引用跟原来的变量实质上是同一个东西&#xff0c;只不过是原变量的一个别名而已。可以有const指针&#xff0c;常量指针可以改…...

简单题67.二进制求和 (java)20240919

题目描述&#xff1a; Java&#xff1a; class Solution {public String addBinary(String a, String b) {StringBuilder result new StringBuilder();int i a.length()-1;int j b.length()-1;int carry 0; //记录进位信息while(i>0 || j>0 || carry!0){int sum ca…...

DDD的主要流程

DDD 开发流程分为模型的建立和模型的实现两大部分&#xff0c;接下来是具体的流程讲解以及流程图。 1. 模型的建立 捕获行为需求&#xff1a;在这一阶段&#xff0c;团队要识别系统中需要完成的任务、操作流程、功能需求以及每个功能由谁操作、会产生什么结果。我们可以通过 …...

linux驱动开发-设备树

设备树的历史背景 背景&#xff1a; 在早期的嵌入式系统中&#xff0c;硬件配置信息通常硬编码在内核源码中&#xff0c;这导致了内核代码的冗长和难以维护。 为了解决这个问题&#xff0c;设备树&#xff08;Device Tree&#xff09;被引入&#xff0c;使得硬件描述与内核代…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...