DTD语法详细介绍

news2024/11/17 13:41:50

在编写XML文档时,需要掌握XML语法。同理,在编写DTD文档时,也需要遵循一定的语法。DTD的结构一般由元素类型定义、属性定义、实体定义、记号(notation)定义等构成,一个典型的文档类型定义会把将来要创建的XML文档的元素结构、属性类型、实体引用等预先进行定义。接下来,针对DTD结构中所涉及到的语法进行详细讲解。

一、元素定义

元素是XML文档的基本组成部分,在DTD定义中,每一条<!ELEMENT…>语句用于定义一个元素,其基本的语法格式如下所示:

<!ELEMENT 元素名称 元素内容>

在上面元素的定义格式中,包含了“元素名称”和“元素内容”。其中,“元素名称”是自定义的名称,它用于定义被约束XML文档中的元素,“元素内容”是对元素包含内容的声明,包括数据类型和符号二部分,它共有五种内容形式,具体如下:

(1)#PCDATA:表示元素中嵌套的内容是普通文本字符串,其中,关键字PCDATA是Parsed Character Data的简写。例如<!ELEMENT 书名 (#PCDATA)>表示书名所嵌套的内容是字符串类型。

(2)子元素:说明元素包含的元素。通常用一对圆括号()将元素中要嵌套的一组子元素括起来,例如,<!ELEMENT 书 (书名,作者,售价)>表示元素书中要嵌套书名、作者、售价等子元素。

(3)混合内容:表示元素既可以包含字符数据,也可以包含子元素。混合内容必须被定义零个或多个,例如,<!ELEMENT 书 (#PCDATA|书名)*>表示书中嵌套的子元素书名包含零个或多个,并且书名是字符串文本格式。

(4)EMPTY:表示该元素既不包含字符数据,也不包含子元素,是一个空元素。如果在文档中元素本身已经表明了明确的含义,就可以在DTD中用关键字EMPTY表明空元素。例如,<!ELEMENT br EMPTY>,

其中br是一个没有内容的空元素。

(5)ANY:表示该元素可以包含任何的字符数据和子元素。例如,<!ELEMENT 联系人 ANY>表示联系人可以包含任何形式的内容。但在实际开发中,应该尽量避免使用ANY,因为除了根元素外,其它使用ANY的元素都将失去DTD对XML文档的约束效果。

需要注意的是,在定义元素时,元素内容中可以包含一些符号,不同的符号具有不同的作用,接下来,针对一些常见的符号进行讲解,具体如下:

● 问号[?]:表示该对象可以出现0次或1次。

●星号[*]:表示该对象可以出现0次或多次。

●加号[+]:表示该对象可以出现1次或多次。

● 竖线[|]:表示列出的对象中选择1个。

●逗号[,]:表示对象必须按照指定的顺序出现。

● 括号[()]:用于给元素进行分组。

二、属性定义

在DTD文档中,定义元素的同时,还可以为元素定义属性。DTD属性定义的基本语法格式如下所示:

<!ATTLIST元素名属性名1属性类型设置说明属性名1属性类型设置说明......>

在上面属性定义的语法格式中,“元素名”是属性所属元素的名字,“属性名”是属性的名称,“属性类型”则是用来指定该属性是属于哪种类型,“设置说明”用来说明该属性是否必须出现。关于“属性类型”和“设置说明”的相关讲解,具体如下:

1、设置说明

定义元素的属性时,有四种设置说明可以选择,具体如下:

1)#REQUIRED

表示元素的该属性是必须的,例如,当定义联系人信息的DTD时,我们希望每一个联系人都有一个联系电话属性,这时,可以在属性声明时,使用REQUIRED。

2)#IMPLIED

表示元素可以包含该属性,也可以不包含该属性。比如,当定义一本书的信息时,发现书的页数属性对读者无关紧要,这时,在属性声明时,可以使用IMPLIED。

3)#FIXED

表示一个固定的属性默认值,在XML文档中不能将该属性设置为其它值。使用#FIXED关键字时,还需要为该属性提供一个默认值。当XML文档中没有定义该属性时,其值将被自动设置为DTD中定义的默认值。

4)默认值

和FIXED一样,如果元素不包含该属性,该属性将被自动设置为DTD中定义的默认值。不同的是,该属性的值是可以改变的,如果XML文件中设置了该属性,新的属性值会覆盖DTD中定义的默认值。

2、属性类型

在DTD中定义元素的属性时,有十种属性类型可以选择,具体如下:

1) CDATA

这是最常用的一种属性类型,表明属性类型是字符数据,与元素内容说明中的#PCDATA相同。当然,在属性设置值中出现的特殊字符,也需要使用其转义字符序列来表示,例如,用&amp;表示字符(&),用&lt;表示字符(<)等。

2) Enumerated(枚举类型)

在声明属性时,可以限制属性的取值只能从一个列表中选择,这类属性属于Enumerated(枚举类型)。需要注意的是,在DTD定义中并不会出现关键字Enumerated。接下来通过一个案例来学习如何定义Enumerated类型的属性,如例1所示。

例1 enum.xml

<?xmlversion="1.0"encoding="GB2312"standalone="yes"><!DOCTYPE购物篮[<!ELEMENT购物篮ANY><!ELEMENT肉EMPTY><!ATTLIST肉品种(鸡肉|牛肉|猪肉|鱼肉)"鸡肉">]><购物篮><肉品种="鱼肉"/><肉品种="牛肉"/><肉/></购物篮>

在例1中,“品种”属性的类型是Enumerated,其值只能为 “鸡肉”、“牛肉”“猪肉”和“鱼肉”,而不能使用其它值。“品种”属性的默认值是“鸡肉”,所以,即使<购物篮>元素中的第三个子元素没有显示定义“品种”这个属性,但它实际也具有“品种”这个属性,且属性的取值为“鸡肉”。

3)ID

一个ID类型的属性用于唯一标识XML文档中的一个元素。其属性值必须遵守XML名称定义的规则。一个元素只能有一个ID类型的属性,而且ID类型的属性必须设置为#IMPLIED或#REQUIRED。因为ID类型属性的每一个取值都是用来标识一个特定的元素,所以,为ID类型的属性提供默认值,特别是固定的默认值是毫无意义的。接下来通过一个案例来学习如何定义一个ID类型的属性,如例2所示。

例2 id.xml

<?xml version="1.0" encoding="GB2312" standalone="yes" ?><!DOCTYPE联系人列表[<!ELEMENT联系人列表ANY><!ELEMENT联系人(姓名,EMAIL)><!ELEMENT姓名(#PCDATA)><!ELEMENTEMAIL(#PCDATA)><!ATTLIST联系人编号ID#REQUIRED>]><联系人列表><联系人编号="1"><姓名>张三</姓名><EMAIL>zhang@itcast.cn</EMAIL></联系人><联系人编号="2"><姓名>李四</姓名><EMAIL>li@itcast.cn</EMAIL></联系人></联系人列表>

在例2中,将元素为<联系人>的编号属性设置为#REQUIRED,说明每个联系人都有一个编号,同时,属性编号的类型为ID,说明编号是唯一的。如此一来,通过编号就可以找到唯一对应的联系人了。

4)IDREF和IDREFS

例2中,虽然张三和李四两个联系人的ID编号是唯一的,但是这两个ID类型的属性没有发挥作用,这时可以使用IDREF类型,使这两个联系人之间建立一种一对一的关系。接下来通过一个案例来学习IDREF类型的使用,如例3所示。

例3 Idref.xml

<?xml version="1.0" encoding="GB2312" standalone="yes" ?><!DOCTYPE联系人列表[<!ELEMENT联系人列表ANY><!ELEMENT联系人(姓名,EMAIL)><!ELEMENT姓名(#PCDATA)><!ELEMENTEMAIL(#PCDATA)><!ATTLIST联系人编号ID#REQUIRED上司IDREF#IMPLIED>]><联系人列表><联系人编号="1"><姓名>张三</姓名><EMAIL>zhang@itcast.org</EMAIL></联系人><联系人编号="2"上司="1"><姓名>李四</姓名><EMAIL>li@itcast.org</EMAIL></联系人></联系人列表>

在例3中,为元素<联系人列表>的子元素<联系人>增加了一个名称为上司的属性,并且将该属性的类型设置为IDREF,IDREF类型属性的值必须为一个已经存在的ID类型的属性值。在第二个<联系人>元素中,将上司属性设置为第一个联系人的编号属性值,如此一来,就形成了两个联系人元素之间的对应关系,即李四的上司为张三。

IDREF类型可以使两个元素之间建立一对一的关系,但是,如果两个元素之间的关系是一对多,例如,一个学生去图书馆可以借多本书。这时,需要使用IDREFS类型来指定某个人借阅了哪些书。需要注意的是,IDREFS类型的属性可以引用多个ID类型的属性值,这些ID的属性值需要用空格分隔。接下来通过一个案例来学习IDREFS的使用,如例4所示。

例4 Library.xml

<?xml version=”1.0” encoding=”GB2312”?><!DOCTYPElibrary[<!ELEMENTlibarary(books,records)><!ELEMENTbooks(book+)><!ELEMENTbook(title)><!ELEMENTtitle(#PCDATA)><!ELEMENTrecords(item+)><!ELEMENTitem(data,person)><!ELEMENTdata(#PCDATA)><!ELEMENTpersonEMPTY><!ATTLISTbookbookidID#REQUIRED><!ATTLISTpersonnameCDATA#REQUIRED><!ATTLISTpersonborrowedIDREFS#REQUIRED>]><library><books><book><bookbookid="b0101"><title>Java就业培训教材</title></book><bookbookid="b0102"><title>Java Web开发内幕 </title></book><bookbookid="b0103"><title>Java开发宝典</title></book></books><records><item><data>2013-03-13</data><personname="张三"borrowed="b0101 b0103"/></item><item><data>2013-05-23</data><personname="李四"borrowed="b0101 b0102 b0103"/></item></records></library>

例4中,将元素<book>中属性名为bookid的属性设置为ID类型,元素<person>中名为borrowed的属性设置为IDREFS类型。从Library.xml文档中可以看出,张三借阅了《Java就业培训教材》和《Java开发宝典》这两本书,而李四则借阅了《Java就业培训教材》、《Java Web开发内幕》和《Java开发宝典》这三本书。

5)NMTOKEN和NMTOKENS

NMTOKEN是Name Token的简写,它表示由一个或者多个字母、数字、句点(.)、连字号(-)或下划线(_)所组成的一个名称。NMTOKENS关键字表示一种列表类型。一个元素的NMOTOKENS类型的属性设置值可以是同一个XML文件中的另外多个NMTOKEN类型的属性的设置值,每个NMTOKEN属性值之间用空格分隔。具体示例如下:

<!ELEMENT用户EMPTY><!ATTLIST用户姓名NMTOKEN#REQUIRED><!ELEMENT数据(#PCDATA)><!ATTLIST数据授权用户NMTOKENS#IMPLIED>

在上面的示例中,元素<用户>的“姓名”属性指定为NMTOKEN类型,元素<数据>的“授权用户”属性指定为NMTOKENS,与这段DTD定义语句对应的XML具体如下:

<用户 姓名="张三">

<用户 姓名="李四">

<数据 授权用户="张三 李四">

这里是一些授权访问的数据

</数据>

6)NOTATION

现实世界中存在很多无法或不易用XML格式组织的数据,例如图像、声音、影像等等。对于这些数据,XML应用程序常常并不提供直接的应用支持,但可以通过设置NOTATION类型的属性来让一个外部应用程序进行处理。在DTD文件中,NOTATION定义语句分为两种情况,具体如下:

第一种情况:<!NOTATION符号名SYSTEM"MIME类型">
第二种情况:<!NOTATION符号名SYSTEM"URL路径名">

在上述定义语句中,第一种情况指定数据的MIME类型,第二种情况指定处理程序的URL路径。当使用NOTATION类型作为属性的类型时,首先要在DTD中使用<!NOTATION…>语句定义相应的notation,接下来通过一个例来演示NOTATION属性的使用,如例5所示。

例5 notation.xml

<?xml version="1.0" encoding="GB2312" standalone="yes"?><!DOCTYPE文件[<!NOTATIONmpSYSTEM"movPlayer.exe">
     <!NOTATION gif SYSTEM "Image/gif">
     <!ELEMENT文件ANY><!ELEMENT电影EMPTY><ELEMENT电影演示设备NOTATION(mp|gif)#REQUIRED><文件><电影演示设备=”mp”/><文件>

在例5中,元素<电影>指定了两种可选的演示设备,一种是movPlayer.exe,一种是用来绘制GIF图像的应用程序。

7)ENTITY和ENTITYS

ENTITY对应的中文意思为实体(关于实体定义的细节,将在后面进行介绍)。当某个属性的类型设置为ENTITY时,表明其属性值必须为在DTD中使用<!ENTITY …>语句定义的一个实体(entity)的引用。接下来看一段DTD定义的语句,具体如下:

<!ENTITYitcast"传智播客论坛交流,www.itcast.cn"><!ELEMENT电影EMPTY><!ATTLIST电影来源ENTITY#REQUIRED>

与这段DTD定义语句对应的XML数据片断如下:

<电影来源="&itcast;"/>

需要注意的是,只有引用实体才可以作为ENTITY类型属性的设置值,参数实体不能用作ENTITY类型的属性的设置值。关于参数实体和引用实体的相关讲解,将在实体定义中进行详细讲解。

ENTITYS关键字用于表示一种列表类型,一个元素的ENTITYS类型的属性设置值可以是多个实体的引用,每个实体的引用之间用空格分隔,具体示例如下:

<!ENTITY banner SYSTEM "http://www.itcast.cn/images/topword.gif">
<!ENTITY logo SYSTEM "http://www.itcast.cn/images/logo.gif">
<!ATTLISTimagesrcENTITIES#REQUIRED>

根据上面的DTD语句,如果想通过src属性引用两幅图像,则对应的XML数据如下所示:

<imgsrc="logo banner">

三、实体定义

有时候需要在多个文档中调用同样的内容,比如公司名称,版权声明等,为了避免重复输入这些内容,可以通过<!ENTITY…>语句定义一个表示这些内容的实体,然后在各个文档中引用实体名替代它所表示的内容。实体可分为两种类型,分别是引用实体和参数实体,接下来,针对这两种实体类型进行详细地讲解。

1)引用实体

引用实体的语法定义格式有两种:

(1)<!ENTITY实体名称"实体内容">
(2)<!ENTITY实体名称SYSTEM"外部XML文档的URL">

引用实体用于解决XML文档中内容重复的问题,其引用方式方法为:

&实体名称;

了解了引用实体的语法格式及其在XML文档中的引用方式,接下来通过一个案例来学习,如例6和例7所示。

例6 book.dtd

<!ENTITYitcast"传智播客官网,www.itcast.cn"><!ELEMENT书架(书+)><!ELEMENT书(书名,作者,售价)><!ELEMENT书名(#PCDATA)><!ELEMENT作者(#PCDATA)><!ELEMENT售价(#PCDATA)>

例7 book.xml

<?xml version="1.0" encoding="GB2312"?><!DOCTYPE书架SYSTEM"book.dtd"><书架><书><书名>Java就业培训教程</书名><作者>&itcast;</作者><售价>39.9</售价></书><书><书名>EJB3.0入门经典</书名><作者>黎活明</作者><售价>39.00元</售价></书></书架>

用IE9.0以下的浏览器打开book.xml文件,浏览器显示的结果如图1所示。

图1提示的错误信息是“文本内容中发现无效字符。”这是因为book.dtd文件使用的是本地字符集编码,即GB2312编码,而DTD文件应该使用UTF-8或者Unicode编码。需要注意的是,IE9以上版本的浏览器也不会提示错误。

接下来我们将book.dtd按照UTF-8编码方式进行重新保存,保存方式如图2所示。

按照图2的方式完成编码保存后,用IE浏览器重新打开book.xml文件或者单击图1-10工具栏中的“刷新”按钮,浏览器显示的结果如图3所示。

从图1、3中可以看出,book.xml文件中的“&itcast;”被显示成“传智播客官网,www.itcast.cn”。

2)参数实体

参数实体只能被DTD文件自身使用,它的语法格式为:

<!ENTITY%实体名称"实体内容">

需要注意的是,在声明参数实体时,ENTITY、%、实体名和“实体内容”之间各有一个空格。

引用参数实体的方式是:

%实体名称;

了解了参数实体的语法格式和引用方式,接下来通过一段示例代码来演示参数实体的定义,具体如下:

<!ENTITY%TAG_NAME"姓名|EMAIL|电话|地址"><!ELEMENT个人信息(%TAG_NAME;|生日)><!ELEMENT客户信息(%TAG_NAME;|公司名)>

在上面的示例中,DTD中定义了两个元素,分别是“个人信息”和“客户信息”,这两个元素的定义中都包含了“姓名| EMAIL|电话|地址”这一相同的部分,因此,可以将相同的部分定义为一个TAG_NAMES的参数实体,然后将“个人信息”和“客户信息”这两个元素的定义规则中的“姓名 | EMAIL | 电话 | 地址”部分替换成对TAG_NAMES这个参数实体的引用即可。

参数实体不仅可以简化元素中定义的相同内容,还可以简化属性的定义,具体示例如下:

<!ENTITY%common.attributes'idID#IMPLIEDaccountCDATA#REQUIRED'><!ELEMENTpurchaseOrder(item+,manufacturer)><!ELEMENTitem(price,quantity)><!ELEMENTmanufacturer(#PCDATA)><!ATTLISTpurchaseOrder%common.attributes;><!ATTLISTitem%common.attributes;><!ATTLISTmanufacturer%common.attributes;>

在上面的示例中,由于多个元素都具有id和account这两个属性的相同定义,因此,可以将这两个属性的文本内容定义为一个名称为common.attributes的参数实体。当定义元素的属性时,通过引用common.attributes 这个参数实体,将该参数实体转换为id和account 这两个属性所定义的文本内容了。

值得一提的是,当DTD的元素和属性定义中要出现大量相同内容时,参数实体是一种非常不错的选择。因为如果需要修改DTD中相同的部分,只需要在参数实体的定义中修改即可。

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

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

相关文章

LeetCode Hot100 ---- 双指针算法专题

167, 88, 142, 76双指针双指针法&#xff0c;有时也叫快慢指针&#xff0c;在数组里是用两个整型值代表下标&#xff0c;在链表里是两个指针&#xff0c;一般能实现O(n)的时间解决问题&#xff0c;两个指针的位置一般在第一个元素和第二个元素或者第一个元素和最后一个元素&…

【Leetcode每日一题】844. 比较含退格的字符串|重构字符串/双指针

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 前言&#xff1a; 昨天的【Leetcode每日一题】27. 原地移除元素|神级理解双指针一文中&#xff0c;生动形象的为大家讲解如何理解双指针&#xff0c;受到…

《收获,不止Oracle》表的连接学以致用

6.2 三大类型 6.2.1 连接类型 嵌套循环 排序合并及散列连接 第一种方式就是数据库表连接中的嵌套循环连接&#xff08;Nested Loops Join&#xff09;&#xff0c;而第二种方式就是表连接中的排序合并连接&#xff08;Merge Sort Join&#xff09;或者散列连接&#xff08;…

【SpringCloud】Gateway服务网关的基本使用

一、初识Gateway服务网关为什么需要网关&#xff1f;在微服务中&#xff0c;各个模块之间的调用&#xff0c;也可以称其为远程调用&#xff01;但是&#xff0c;如果是外部&#xff08;用户&#xff09;对微服务进行访问时&#xff0c;发的请求能不加处理的直接访问微服务吗&am…

使用Client Java构建Exporter程序

一、client_java client_java是Prometheus针对JVM类开发语言的client library库&#xff0c;我们可以直接基于client_java用户可以快速实现独立运行的Exporter程序&#xff0c;也可以在我们的项目源码中集成client_java以支持Prometheus。注意&#xff1a;Prometheus 提供的cl…

WordPress默认数据库中的12个数据表

WordPress 安装的时候数据库会有 12 张默认的数据表&#xff0c;每张表的数据都包含了 WordPress 不同的功能。看看这些表的结构&#xff0c;你能很容易的了解网站不同的部分都是存在哪里的。目前&#xff0c;默认的 WordPress 安装会创建如下12个数据表。表名描述wp_users您的…

大数据在5G应用场景下有哪些示范项目?

近期&#xff0c;贵州省2022年5G应用场景示范观摩会在贵阳召开&#xff0c;此次观摩会由贵州省大数据发展管理局、贵州省通信管理局主办。数据宝“基于5G技术的交通国有大数据治理多元应用”获得贵州省5G应用场景示范项目&#xff08;五星&#xff09;称号。 据悉&#xff0c;…

二叉树(二)

前言本章我们继续了解二叉树。上文我们对树和二叉树有了简单的了解&#xff0c;详见二叉树&#xff08;一&#xff09;这里我要解释一下为什么我们不对树进行增删查改呢&#xff1f;答案是&#xff1a;没有意义。我们更应该把有限的精力用作有意的地方&#xff0c;那么我们今天…

TLS协议。

IPSec通过安全关联实现IP分组安全关联两端之间的安全传输过程&#xff0c;TLS通过建立安全连接实现数据在两个应用进程之间的安全传输过程。TLS建立安全连接时&#xff0c;实现安全连接两端应用进程之间的双向身份鉴别过程&#xff0c;保证经过安全连接传输的数据的保密性和完整…

【GPLT 二阶题目集】L2-017 人以群分

社交网络中我们给每个人定义了一个“活跃度”&#xff0c;现希望根据这个指标把人群分为两大类&#xff0c;即外向型&#xff08;outgoing&#xff0c;即活跃度高的&#xff09;和内向型&#xff08;introverted&#xff0c;即活跃度低的&#xff09;。要求两类人群的规模尽可能…

时间序列模型

一、季节分解 1、概念 时间序列也称为动态序列&#xff0c;是指将某种现象的指标数值按照时间顺序排列而成的数值序列。主要由时间要素和数值要素构成。时期序列中&#xff0c;数值要素反映现象在一定时期内发展的结果&#xff1b;时点序列中&#xff0c;数值要素反映现象在一…

如何在FreeBSD中安装Nginx,MySQL,PHP(FEMP)

本文介绍如何在FreeBSD 13系统中安装Nginx、MySQL、和PHP服务。系统环境FreeBSD 13.0-RELEASE更新系统在安装任何软件之前更新系统是一个好习惯&#xff0c;以便检查系统更新&#xff1a;rootfreebsd:~ # freebsd-update fetchrootfreebsd:~ # freebsd-update install安装Nginx…

在线教育-谷粒学院学习笔记(九)

文章目录1 内容介绍2 搭建项目前台环境NUXT3 整合项目首页4 nuxt路由5 首页数据banner显示—初始配置6 首页数据banner显示—接口7 首页数据banner显示—前端实现8 首页数据显示—热门课程和名师9 Redis复习10 首页数据添加Redis缓存1 内容介绍 搭建项目前台系统环境 NUXT 整合…

【PHP 随记】—— Composer 安装及镜像配置

&#x1f449;总目录&#x1f448;\large\colorbox{skyblue}{&#x1f449;总目录&#x1f448;}&#x1f449;总目录&#x1f448;​ 文章目录1、Composer 安装2、配置镜像Composer 是 PHP 用来管理依赖&#xff08;dependency&#xff09;关系的工具&#xff1b;简单来说&…

等级保护介绍

等保流程 等级保护 等保发展历程 。1994 首次国家提出等级保护概念 。1999 针对信息系统保护有法律依据 。2007 等保1.0措施。 。2017 立法了《网络安全法》 。2019年 等保2.0 颁布 等保2.0和1.0有什么特点和区别 1.名称变了信息安全技术信息等级保护要求 改为 信息安全基础网络…

1、测试用例通用模板

一、针对大版本需求的测试用例模板 1、测试用例模板说明 1.1、表头说明 项目版本号V1.0--测试用例&#xff08;示例标题&#xff09;(xxxxx有限公司测试组/ONLY FOR INTERNAL USE ONLY)Confidentiality level 密级(xxxxxx测试组/仅供内部使用) Internal 内部公开 修订记录版…

软件设计(二)

软件设计&#xff08;一&#xff09;https://blog.csdn.net/ke1ying/article/details/128779601 11、windows系统当双击.jpg文件的时候&#xff0c;系统会通过建立的 文件关联 来决定使用什么程序来打开该图像文件。 &#xff08;双击.jpg文件&#xff0c;系统会建立‘window…

【哈希表】leetcode349. 两个数组的交集(C/C++/Java/Python/Js)

leetcode349. 两个数组的交集1 题目2 思路--set2.1 拓展/后记3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 Python 版本3.5 JavaScript版本4 总结1 题目 题源链接 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考…

分享150个ASP源码,总有一款适合您

ASP源码 分享150个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 150个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1DpxbFxdGCl9eWEe3AaD1eA?pwdecqi 提取码&#x…

echarts数据可视化项目搭建(二)

目录主题设置默认主题重点示例自定义主题调色盘主题全局局部颜色渐变可视化图表自适应重点示例实现简单的加载动画重点示例增量动画实现重点示例简单动画配置项关于全局echarts对象和echartsInstance对象echarts.connect()其他echarts实例对象方法本博客内容参考黑马课程&#…