Java高级特性 第12节 XML技术
一、XML简介
1. XML介绍
XML是可扩展标记语言(Extensible Markup Language ),XML是一种数据格式,类似 HTML,是使用标签进行内容描述的技术,与HTML不同的是,XML的标签和属性都是根据业务需求自定义的。
XML可以作为配置文件的载体,例如servlet、struct2、hibernate的配置都是通过XML进行配置的:web.xml(web工程项目的核心配置文件)、beans.xml(Spring框架)、hibernate-config.xml(hibernate框架)、mapping.xml(hibernate和mybatis框架)等。
XML有以下特点:
- XML与操作系统、编程语言的开发平台都无关(通用的数据交换格式)
- 实现不同系统之间的数据交换(包括系统的配置文件)
- 是一种标记语言,没有固定的标记,可以自定义创建
作用:数据交互、配置应用程序和网站等
2. XML文档结构
下面是一个XML文档BookStore.xml:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2019</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2015</year>
<price>39.95</price>
</book>
</bookstore>
它的树形结构如下:
- XML 的声明
<?xml version=”1.0” standalone=”yes” encoding=”UTF-8”?>
这是一个XML处理指令。处理指令以 <? 开始,以 ?> 结束。<? 后的第一个单词是指令名,如xml, 代表XML声明。version, standalone, encoding 是三个特性,特性是由等号分开的名称-数值对,等号左边是特性名称,等号右边是特性的值,用引号引起来。
- version: 说明这个文档符合1.0规范
- standalone: 说明文档在这一个文件里还是需要从外部导入, standalone 的值设为yes 说明所有的文档都在这一文件里完成
- encoding: 指文档字符编码
- 标签
在XML中,用尖括号括起来的各种标签来标记数据,标签成对出现来界定字符数据,XML文档中可以包含任意数量的标签。
标签分为两大类:
单标签:<标签名 属性名=属性值 属性名=属性值/>
双标签:<标签名 属性名=属性值 属性名=属性值></标签名>
- 根元素
每个XML文档有且仅有一个根元素。如<bookstore></bookstore>。
根元素是一个完全包含文档中其他所有元素的元素,根元素的起始标记要放在所有其它元素起始标记之前,根元素的结束标记根放在其它所有元素的结束标记之后。
- 元素
元素的基本结构由 开始标记,数据内容,结束标记组成,如
<Person>
<Name>Zhang San</Name>
<Sex>Male</Sex>
</Person>
需要注意的是:
- 元素标记区分大小写,<Name> 与 <name>是两个不同的标记;
- 结束标记必须有反斜杠,如 </Name>;
XML元素标记命名规则如下:
- 名字中可以包含字母,数字及其它字母
- 名字不能以数字或下划线开头
- 名字不能用xml开头
- 名字中不能包含空格和冒号
- 属性
标签的属性可以有多个,多个属性写在标签上使用空格隔开就行。如:<元素名 属性名="属性值" 属性名="属性值"></>
- 属性值用双引号包裹;
- 一个元素可以有多个属性;
- 属性值中不能直接包含<、“、&(不建议:‘、>),最好都不要写;
- XML注释
<!-- this is comment -->
需要注意的是:
- 注释中不要出现“--”或“-”;
- 注释不要放在标记中;
- 注释不能嵌套 ;
- XML中特殊字符的处理
(1)在 XML 中,有 5 个预定义的实体引用:
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 引号 |
在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
(2)如果在元素的文本中存在大量的特殊字符,可以使用CDATA处理:
语法格式:<![CDATA[要显示的字符]]>
注意:在 XML 中,空格会被保留。HTML会把多个连续的空格字符裁减(合并)为一个:
HTML: Hello my name is David.
输出: Hello my name is David.
但在 XML 中,文档中的空格不会被删节。
- 格式良好的XML文档
- 所有XML元素都必须有结束标签(</……>)
- XML标签对大小写敏感
- XML必须正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始(<5name>是错误的;<name5>是正确的)
- 元素名称中不能含空格(<student name>是错误的;<studentname>是正确的的)
二、在XML中使用命名空间
命名空间在XML中可以用作元素或属性名称的名称集合,它们用来标识来自特定域(标准组组、公司、行业)的名称。
1. 空间命名的必要性
XML解析器在解析XML文档时,对于重名的元素,可能出现解析冲突,命名空间有助于标准化元素和属性,为它们加上唯一标识。
2. 声明命名空间
语法:xmlns:[prefix]="[命名空间的URL]"
- prefix是前缀名称,它用作命名空间的别名;
- xmlns是保留属性;
3. 属性和命名空间
除非带有前缀,否则属性属于它们的元素所在的命名空间。
4. 命名空间的应用
例如,这个 XML 文档携带着某个表格中的信息:
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
此 XML 文档携带着有关一件家具的信息:
<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
与仅仅使用前缀不同,我们为 <table> 标签添加了一个xmlns属性,里面的网址是统一资源标识符,目的是唯一标识一个命名空间,每一个统一资源标识符都是不一样的,但是没有实际意义,但是一般都能连到一个网页,取值这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
三、验证XML文档
DTD 是 DocType Definition 的简称,中文翻译为文档类型定义,DTD 的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构,用于约定 XML 的格式。规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。
DTD主要作用有:
- 使用 DTD 可以提供一种统一的格式。
- 使用 DTD 可以保证数据交流和共享的顺利进行。DTD 使用户能够不依赖具体的数据就知道文档的逻辑结构。
- 使用 DTD 可以验证数据的有效性。DTD 对文档的逻辑结构进行了约束,这种约束可以比较宽松,也可以十分严格。可以根据 DTD 检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。
1. 使用DTD验证XML文档
DTD 主要定义方式:
(1)内部定义法,DTD 文件放在 XML 文件内部。
<!DOCTYPE 根元素 [元素定义]>
DTD元素定义语法: <!ELEMENT NAME CONTENT>
- ELEMENT : 关键字
- NAME : 元素名称
- CONTENT:元素类型
如下面的例子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book+)>
<!ELEMENT book (bookname,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT bookname (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<bookstore>
<book>
<bookname>唐诗</bookname>
<author>libai</author>
<price>112.00元</price>
</book>
<book>
<bookname>降龙十八讲秘籍</bookname>
<author>郭芙</author>
<price>5元</price>
</book>
</bookstore>
常用的元素类型如下:
- #PCDATA: 可以包含任何字符数据,但是不能在其中包含任何子元素,如: <!ELEMENT title (#PCDATA)>
- EMPTY:用于指示元素的主体为空。比如<br/>
- ANY:用于指示元素的主题内容为任意类型。
- (子元素):指示元素中包含的子元素。
- 纯元素类型,只包含子元素,并且除这些子元素外没有文本内容,如:<!ELEMENT poems(poem*)>
DTD中一些符号的用途;
1) 如果子元素用逗号隔开,必须按照声明顺序去编写XML文档。
例如:<!ELEMENT FILE(TITLE, AUTHOR, EMAIL)>
2)如果子元素用"|" 分开,说明任选其一。
例如:<!ELEMENT FILE(TITLE|AUTHOR|EMAIL)>
3)用+、*、? 来表示元素出现的次数。
如:<!ELEMENT MYTITLE((TITLE*,AUTHOR?,EMAIL))*|COMMIT>
DTD属性(ATTLIST)定义:
<!ATTLIST 元素名称
属性名 属性类型 约束
属性名 属性类型 约束
......
>
属性声明举例:
<!ATTLIST 商品
类别 CDATA #REQUIRED 必须的
颜色 CDATA #IMPLIED 可选的
>
对应的XML为:<商品 类别="服装" 颜色="黄色" />
属性值类型:
- CDATA:表示属性的取值为普通的文本字符串。
- ENUMERATED(DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
- ID:表示属性的取值不能重复(不能只写数字)
设置说明:
- #REQUIRED:表示该属性必须出现
- #IMPLIED:表示该属性可有可无。
- #FIXED:表示该属性的取值为一个固定值。语法:#FIXED "固定值"
- 直接值:表示属性的取值为默认值。
DTD 定义属性示例:
<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
网站职务 CDATA #FIXED "页面作者"
个人爱好 CDATA "上网"
>
(2) 使用外部DTD验证XML
语法格式:<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
如下例子:
book.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookstore SYSTEM "bookstore.dtd">
<bookstore>
<book>
<bookname>带你飞培训教程</bookname>
<author>huangjinjin</author>
<price>1.00元</price>
</book>
<book>
<bookname>降龙十八讲秘籍</bookname>
<author>洪七公</author>
<price>0.01元</price>
</book>
</bookstore>
bookstore.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book+)>
<!ELEMENT book (bookname,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT bookname (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
2. 使用Schema验证XML文档
XML Schema 是基于 XML DTD 的替代者,XML Schema 描述 XML 文档的结构。XML Schema 语言也称作 XML Schema 定义(XML Schema Definition 简称 XSD)。DTD 不是通过 XML 语法定义文档结构,不能定义数据类型和限制;Schema 通过 XML 语法定义文档结构,可以定义数据类型和限制。
XML Schema 对 XML 文件的主要约定有:
定义可出现在 XML 文档中的元素;
定义可出现在 XML 文档中的属性;
定义哪个元素是子元素;
定义子元素的次序;
定义子元素的数目;
定义元素是否为空,或者是否可包含文本;
定义元素和属性的数据类型;
定义元素和属性的默认值以及固定值。
1)Schema文档结构
Schema文档本身是一个XML文档,所以必须满足XML文档结构。在每个Schema文档中必须包含一个根元素<xs:schema>。
note.xsd:
<?xml version="1.0"?>
<!--每个Schema中都必须包含xs:schema根节点,然后在根节点中定义内容!-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
定义内容
</xs:schema>
说明:
- xmlns:xs="http://www.w3.org/2001/XMLSchema":显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
- targetNamespace="http://mynamespace/myschema" :显示被此 schema 定义的元素验证的XML来自的命名空间。
- xmlns="http://www.w3school.com.cn" :指定默认的命名空间 。
- elementFormDefault="qualified" :指目标XML是否遵循本Schema,qualified表示遵循,unqualified表示不遵循。
2)在XML中引用Schema文档
<?xml version="1.0"?>
<!--引用Schema文档-->
<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
说明:
- xmlns="http://www.w3school.com.cn" :规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。
- xsi:schemaLocation="http://www.w3school.com.cn note.xsd":指定文件路径。
3) Schema常用数据类型:
Schema中支持丰富的数据类型,可以简单分为简单类型和复合类型。
- 简单类型包括:
- 内置的数据类型。
- 基本的数据类型
- 内置的数据类型。
基本的数据类型 |
|
数据类型 | 描述 |
string | 字符串 |
boolean | 布尔类型 |
decimal | 特定精度的数字 |
float | 单精度浮点数 |
double | 双精度浮点数 |
duration | 表示持续时间/日期格式 |
dateTime | 完整日期格式 |
time | 代表时分秒 |
date | 代表日期 |
- 扩展的数据类型
扩展的数据类型 | |
数据类型 | 描述 |
ID | 用于唯一表示元素 |
IDREF | 应用ID元素的属性或属性 |
ENTITY |
实体类型 |
long |
表示长整型:-9223372036854775808~9223372036854775807 |
int | 表示整型:-2147483648~--2147483647 |
short | 表示短整型:-32768~32767 |
byte |
整型:-128~127 |
- 用户自定义的简单类型(通过simpleType定义)
- 复合类型(通过complexType定义)
4)Schema中的元素类型
1、根元素:schema。
包含已经定义的schema。
- 属性:
- xmlns:schema的命名空间。
- targetNamespace:要验证的XML文件的命名空间。
- elementFormDefault:要验证的XML是否遵循当前的验证命名空间。
2、用于定义元素和属性的元素:element、attribute、group、attributeGroup。
1) element:声明一个元素
- 属性:
- name:需要限定XML文档元素的名称。
- type:需要限定XML文档元素的类型。
- ref:引用外部定义的元素
- minOccurs:元素最小出现的次数。
- maxOccurs:元素最大出现的次数。
例:声明student节点,类型为string类型,最小出现1次,最多出现3次。
<xs:element name="student" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
2)group:声明一个分组
将多个元素声明放到一个分组中,然后在其他元素中通过group引用。
- 属性:name分组的名称
例:将name和age定义为一个分组,然后在student中引用这个分组。
<!--外部定义一个标记-->
<xs:element name="student">
<xs:complexType>
<!--引用分组标记-->
<xs:group ref="stuinfo" maxOccurs="unbounded"></xs:group>
</xs:complexType>
</xs:element>
<!--定义一个分组标记-->
<xs:group name="stuinfo">
<xs:sequence>
<!--自定义的子元素:name和age,name类型为string,age类型为byte,只能出现1次-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="age" type="xs:byte"></xs:element>
</xs:sequence>
</xs:group>
3)attribute元素:
用于声明一个属性:
- 属性:
- name:属性名称
- type:属性类型
- user:是否必选,required必选,optional可选,默认可选
- default:默认值
- fixed:固定值
注意:默认值和固定值不能同时出现。
示例:属性的用法
Schema文档:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element name="student" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="age" type="xs:byte" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd">
<student name="zhangsan" age="29"/>
<student name="lisi" age="19"/>
</students>
4)attributeGroup属性组
和前面的元素组类型,在外部定义属性组,然后在元素中引用属性组。
Schema文档:
<!--定义属性组:stuattgroup-->
<xs:attributeGroup name="stuattgroup">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="age" type="xs:byte"/>
</xs:attributeGroup> <!--引用属性组-->
<xs:element name="student" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="stuattgroup"></xs:attributeGroup>
</xs:complexType>
</xs:element>
3、用于定义简单类型:simpleType。
它决定了元素和属性值得约束和相关信息。
属性:name
常用的两种方式:
1)restriction:约束
对现有类型进行扩充。
示例:设置年龄必须在18-100之间
<xs:attributeGroup name="stuattgroup">
<xs:attribute name="name" type="xs:string"/>
<!--将原来的xs:int换位age类型-->
<xs:attribute name="age" type="age"/>
</xs:attributeGroup>
<!--扩展int类型,设置int取值只能是18到100,包含18和100-->
<xs:simpleType name="age">
<xs:restriction base="xs:int">
<xs:minInclusive value="18" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
2)list:列表
从一个特定的数据类型的集合中选择定义一个简单类型元素。
Schema文档:
<!--Schema文档-->
<!--定义列表数据,其每项子元素为自定义扩展类型-->
<xs:simpleType name="stuScore">
<xs:list itemType="stuScoreItem"></xs:list>
</xs:simpleType>
<!--定义扩展类型限定0-100之间-->
<xs:simpleType name="stuScoreItem">
<xs:restriction base="xs:int">
<xs:minInclusive value="0" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
<!--声明Scores节点,包含list格式数据-->
<xs:element name="scores" type="stuScore">
</xs:element> <!--XML文档中的数据-->
<scores xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="scores.xsd">
10 20 300
</scores>
4、用于定义复杂类型:complexType。
需要使用在节点下包含子节点的情况。
Schema文档:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<!--通过ref来应用student标记 maxbounded表示不限定出现的次数-->
<xs:element ref="student" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element> <!--外部定义一个标记-->
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<!--自定义的子元素:name和age,name类型为string,age类型为byte,只能出现1次-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="age" type="xs:byte"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd">
<student>
<name>张三</name>
<age>20</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</students>
5、用于进行约束:choice、list、sequence、restriction。
1) choice
把一组属性声明组合到一起,一边被复合类型所应用,XML中只能出现限定选项中的一个元素。
Schema文档:
<!--设定交通工具只能是自行车,小汽车,摩托车中的一项-->
<xs:element name="交通工具">
<xs:complexType>
<xs:choice>
<xs:element name="自行车" type="xs:string"></xs:element>
<xs:element name="小汽车" type="xs:string"></xs:element>
<xs:element name="摩托车" type="xs:string"></xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
XML文档:
<交通工具 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vehicle.xsd">
<自行车></自行车>
<!--
<小汽车></小汽车>
<摩托车></摩托车>
包含任意一个,包含多个会报错!
-->
</交通工具>
2)sequence
表示元素必须按照规定的序列进行显示。
Java高级特性 第12节 XML技术的更多相关文章
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- Java高级特性 第14节 解析XML文档(2) - SAX 技术
一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...
- Java高级特性 第15节 解析XML文档(3) - JDOM和DOM4J技术
一.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. Jdom由6个包构成: Element类表示XML文档的元素 org.jdom: 解析xml ...
- Java高级特性 第8节 网络编程技术
一.网络概述 1.网络的概念和分类 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设 ...
- Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架
一.软件测试 1.软件测试的概念及分类 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终 ...
- Java高级特性 第5节 序列化和、反射机制
一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...
- Java高级特性 第1节 集合框架和泛型
Java中,存储多个同类型的数据,可以用数组来实现,但数组有一些缺陷: 数组长度固定不变,布恩那个很好的适应元素数量动态变化的情况 可以通过数组.length获取数组长度,却无法直接获取数组中实际存储 ...
- Java高级特性 第10节 IDEA和Eclipse整合JUnit测试框架
一.IDEA整合Junit测试框架 1.安装插件 打开File菜单的下拉菜单settings[设置] : 点击左侧Plugins[插件]菜单 在输入框中输入JUnitGenerator 2.0,点击I ...
- Java高级特性 第9节 Socket机制
一.Socket简介 1.Socket概述 Java最初是作为网络编程语言出现的,它对网络的高度支持,使得客户端和服务器流畅的沟通变成现实.而在网络编程中,使用最多的就是Socket,每一个实用的网络 ...
随机推荐
- url参数解析 and 日期格式化
~function (pro) { //url解析 function queryURLParameter() { var reg = /([^?&=#]+)=([^?&=#]+)/g, ...
- C++ MySQL编程
MySQL编程需要包含<mysql.h>头文件.该文件一般在MySQL安装目录下的include文件夹下. 包含头文件还不够,还需要包含“libmysql.lib”库,一般在lib文件夹下 ...
- ykit入门
init lint pack server watch 1.创建现有工程的ykit项目 在项目文件夹下 ykit init 2.lint 检查当前项目的代码质量 手动执行代码 可验证代码正误 yk ...
- C# 连蒙带骗不知所以然的搞定USB下位机读写
公司用了一台发卡机,usb接口,半双工,给了个dll,不支持线程操作,使得UI线程老卡. 懊恼了,想自己直接通过usb读写,各种百度,然后是无数的坑,最终搞定. 现将各种坑和我自己的某些猜想记录一下, ...
- OpenGL之纹理贴图(Texture)
学习自: https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/ 先上一波效果图: 实际上就是:画了一个矩形,然后 ...
- 【转】Android-Input 按键字符映射文件&输入设备配置文件
https://source.android.com/devices/input/key-character-map-files 按键字符映射文件 按键字符映射文件(.kcm 文件)负责将 Andro ...
- linux centos7下源码 tar安装mysql5.7.23(5.7以上均可试用)
1.工具:mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz.centos7 2.解压后,将mysql-5.7.22-linux-glibc2.12-x86_64里面 ...
- axios学习 - 数据获取及渲染
在app.vue和main.js中引入axios(import axios from 'axios') 基本代码: axios.get('/axios.json') .then(function(re ...
- linux服务器共享给windows的client打印机配置
最近实验室新进来一台服务器还有打印机,老大意思让服务器连接打印机并进行网络共享,其他的人可以通过自己的PC连接到共享打印机,打印各自电脑的文件.这样的需求可能很多人都有遇到,我也是遇到这件事,在网上搜 ...
- win7 安装用mingw编译的Qt源码并连接postgresql
下载Qt 1.下载qt-creator-windows-opensource-2.8.0,下载路径:http://download.qt.io/official_releases/qtcreator/ ...