SVG文档语法结构

SVG 语法结构说明
文档说明
版本
日期
作者
说明
1.0
2006.1.29
很少想起你
第 1 页 共 23 页
SVG 语法结构说明
SVG语法结构
一、SVG文档结构格式(为了方便说明,在文中加入标号和冒号;为了方便阅读,加了超链接):
1:
2: “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”>
3: Version=“1.1” xmlns=“http://www.w3.org/2000/svg”>
4: 此标注相当于HTML中的title标注
5: SVG文件内容描述,类似文件功能注解,这部分内容不会出现在以后显示的画面中

预定义可重用部件。并给它们指定以后可在图像主体中调用的标识。在图像主体部分通过用
标注引用预定义项的元素将它们链接到文档。

6:

7:

8:




9:





10:


第 2 页 共 23 页
SVG 语法结构说明




11:







12:





13:




14:
markerUnits="strokeWidth" markerWidth="3" markerHeight="10" orient="auto">






这里开始是整个SVG文件的重心,向量图形、图像、文字、动画等内容都应包含置于此。
15:

16:
第 3 页 共 23 页
SVG 语法结构说明

17:






18:
.
.
.
.
.
23: marker-mid="url(#arrow)"
marker-end="url(#arrow)" />


24: 专用变压器
变压器组

让我们荡起双桨

25: 显示属性
ID:
26: GroupID:
Remark:

27:

Text travels along any path that you define for it!




第 4 页 共 23 页
SVG 语法结构说明



第一行:从本质上来说,SVG 文档是 XML 文档。这就是说 SVG 文档有某些基本属性。所以文档应该以 XML 声明 开始。
version属性表示XML的版本,因为解析器对不同的版本的解析肯定会有区别,尽管目前版本只有1.0版本,但在声明中必须指定version
属性。
standalone属性规定本svg文件是否是独立的,如果将其设置为”yes”,则表示该文档没有依赖外面的任何文件
而可以独立存在,即不需要DTD文件来验证其中的标识是否有效,也不需要XSL、CSS文件来控制其显示外观;将standalone属性设置为”no”时,则表示该文档依赖于外面的某个文件,例如依赖于某个DTD文件或XSL、CSS文件。standalone属性的默认值是”yes”。
encoding由于可以采用不同的字符编码集来书写一个字符内容完全相同的XML文档,所以,XML软件工具(包括分析器)就需要知道该XML文档所使用的字符编码方式。这可以通过在XML文档声明中指定encoding属性来说明。
第二行:指定外部的DTD。XML文档通过使用DOCTYPE声明语句(文档类型定义语句)来指明它所遵循的DTD文件。DOCTYPE声明语句紧跟在XML文档
声明语句后面,有两种格式:
(1)
(2)
各部分的意义和作用如下:
文档类型名称可以由XML文档编写者自己定义,一个通用的习惯是使用XML文档的根元素名称来作为文档类型名称。
关键字SYSTEM表明XML文件所遵循的是一个本地或组织内部所编写和使用的DTD文件。
关键字PUBLIC表明该XML文件所遵循的是一个由权威机构制定的、公开提供给特定行业或公众使用的DTD文件,而不是某个组织内部的规范文件。
“DTD名称”用于指定该DTD文件的标识名称,它只在使用关键字PUBLIC的DOCTYPE声明语句中出现。DTD标识名称需要用双引号括起来,例如,用于Java Web应用程序的配置文件的DTD文件的标识名称为”-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN”。DTD标识名称应符合一些标准的规定,对于ISO标准的DTD以”ISO”三个字母开头;被改进的非ISO标准的DTD以加号”+”开头;未被改进的非ISO标准的DTD以减号”-”开头。紧跟着开始部分后面的是双斜杠”//”及DTD所有者的名称,在这个名称之后又是双斜杠”//”,之后是DTD所描述的文件的说明,最后在双斜杠”//”之后是语言的种类。虽然标识名称看上去比较复杂,但这完全是由DTD文件发布者去考虑的事情,XML文件的编写者只要把DTD文件的发布者事先定义好的DTD标识名称复制到相应的位置就可以了。
“DTD文件的URL”部分指定该DTD文件所在的位置,需要用双引号括起来。对于使用PUBLIC属性的DOCTYPE语句,”DTD文件的URL”指定该该DTD文件的在Internet上的绝对URL,例如,用于Java Web应用程序的配置文件的DTD文件的位置为
“http://java.sun.com/dtd/Web-app_2_3.dtd”。解析器在对XML文档进行有效性确认时,通常都需要从该指定的URL下载DTD文件,但是,对于一些已经制定成为了行业标准的DTD文件,一些相应的解释器程序可能已经将他们内嵌进去,所以在解析时并不一定到指定的URL进行下载。对于使用SYSTEM属性的DOCTYPE语句,”DTD文件的URL”除了可以是Internet上的一个绝对URL外,它还可以是一个本地文件系统的相对路径。
该DTD”http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”,在W3C网站上,并包含所有可用的svg元素。
第 5 页 共 23 页
SVG 语法结构说明
第三行:标记告诉浏览器,这是一个SVG文档,SVG文档的宽和高(或叫做SVG的画布大小)用height和width属性来定义,如果不定义 width和height属性的话,画布的范围将是整个浏览器,x,y属性告诉浏览器将SVG画布放到什么位置,x属性与我们平常所用top属性相同,指浏览器的top位置,y属性等同于浏览器的left位置,当然,这里也可以使用相对位置来定位,即百分比。
在指定width和height后,我们实际上就建立了一个显示图形的显示区,单位可以使用em、ex、px、pt、pc、cm、mm,如果不指定单位,则缺省的单位是像素点。所有其他物品的测量数字的单位与width和height所使用的单位相同。
svg文档以根元素开始,包含开始标签和结束标签。version属性定义了svg的版本,xmlns属性定义了svg的名称空间。
名称空间的声明指定了这些 SVG 元素位于 SVG 名称空间内,编写这些元素时无需带任何名称空间的前缀。在使用Adobo SVG Viewer3.0浏览 SVG 图像时可以缺省定义这些命名空间,Adobo SVG Viewer3.0浏览环境会默认的将文档内的 XML 元素识别为SVG 元素。但当我们使用Batik 浏览 SVG 图像时,这些命名空间是必须要指定的,否则,脚本的链接和其他一些复杂的功能将不能起作用。
单位
含义
cm
公分 "1cm" equals "0.394in"
mm
毫米 "1in" equals "25.4mm"
in
英吋 "1in" equals "90px"
pt
点(72点 = 1 英吋)
pc
派卡(12 点 = 1 派卡,6 派卡 = 1 英吋)
px
像素(有时随格式化程式或设备的不同而有所不同,所以要小心使用)
em
一个大写M 的宽度
第四行:所有的SVG内容,都被放到标记之间。
元素是对标题的描述。如果不指定<title>元素,标题则显示svg文档的路径。<br>第五行:desc元素包含一些对svg文档描述性的信息。此部分不显示。<br>第六行:如果一个SVG对象(包括元素、属性、组元素)需要被多次使用,可以首先对该对象进行声明定义。使用defs元素,该定义中必须包括ID标志。象 HTML 页面一样,id 属性创建了文档中的一个引用点。<br>当需要将预定义项作为元素使用时,是通过用 <use/> 元素将它们链接到文档。并确定放置对象的位置,利用xlink属性指定对象的ID标志,完成调用:<use xlink:href=”#id” />。<br>当需要将定义的项作为属性使用时,使用url函数引用指定对象的ID标志,完成调用:url(#id)。<br>文中定义了内嵌的CSS。<br>第七行:在SVG中,可以通过脚本编程来实现一些比较复杂的交互操作。SVG用<script>元素来在SVG文档中插入脚本,它的功能几乎和HTML中的<script>标记一样。<br><script>有两个属性,type=“content-type”,这里指明所用的script语言的类型。默认情况下script采用的语言是JavaScript语言。<br>Xlink:href=“<uri>“指明引用外部脚本文件的url。<br>第八行:通过<symbol>元素,预定义一个圆模板。<br>第九行:通过<symbol>元素,预定义一个由两个圆组成的模板。注意,在<defs>字节里,可以通过<use>元素引用<defs>已经预定义好的元素。<br>第十行:通过<symbol>元素,预定义一个由三个圆组成的模板。我暂且把它想象成一个变压器组。<br>十一行:预定义一些基本图元元素,如矩形、划线、点划线等。<br>如需要画虚线,请注意stroke-dasharray属性的使用。该属性是一个整数系列(如 3、2、3和3),它允许对虚线中每一划的相对长度进行控制。stroke-dasharray的附值个数如果是偶数就表示为画多<br>第 6 页 共 23 页<br>SVG 语法结构说明<br>少空多少的形式;如果是奇数就自动在后面加相同的数形成偶数,比如1 2 3就会变成1 2 3 1 2 3 于是就可以表示为画多少空多少的形式。<br>十二行:预定义图形组。(让我暂且想象把一个矩形和两个圆组合成一个专用变压器),注意use的使用方法。<br>在以后需要用”专用变压器”的地方,只管通过<use>元素引用(即<use xlink:href=“#专用变压器”)就可以了。<br>增加新的图标(专用变压器)只是在不同的位置增加一个引用而已。再不增加实际的绘图数据。减少了数据量;同时,如果要修改某类信息的显示图标,只要修改预定义的图标即可,方便了管理。图标在地图上的实际大小和位置为transform指定的大小和位置,其中scale指定图标的缩放比例,translate指定图标的x方向和y方向的偏移。<br>另:由于SVG是基于XML格式的,除了使用其内置的属性外,可以对其属性进行任意扩充,以实现自定义的功能。在SVG图形中,对象的属性id是用来标志唯一对象的编号,可以通过SVG文档对象的getElementById()函数来获取指定的对象。WebGIS采用id好作为图形内在的标示,而自定义其他的属性如名称(name),提示信息(tip)等来存储其GIS属性。获取或赋值这些属性的方法是调用getAttribute及setAttribute函数。<br>十三行:我只是把三个圆组合暂且想象成一个”变压器组”,其他同上。<br>十四行:预定义标记(箭头)、路径。<br>十五行:根据编组元素<g>的特点,将其用于图层管理,很方便的控制使用。<br>通过采用组对象来实现图层管理功能,不同图层的对象包含在不同的组中。通过设置组的属性,就可以实现如可见性<br>(visibility=visible|hidden)、颜色、透明度等设置以及选中、删除所有对象等操作。SVG中的对象的样式属性具有继承性,如果下一级<br>没有某样式属性,则直接使用其上一级的属性,以此类推,直到顶级为止。如:对某层设置某个显示透明度,则其下级元素显示时,均采用<br>该透明度,除非其下级元素指定了透明度属性。<br>这个容器可以用来标识元素,或提供一个公共属性(本地定义的属性将会覆盖公共属性)。<br>十六行:通过<use />元素引用预定义项,将它们链接到文档中,如:<use xlink:href="#c1" />。其中c1为<defs>字节里定义的元素的id属性值。<br>注意:<br>※ <use />元素在以这种方式使用时成为了一个可以拥有自己坐标系统的容器。<br>※ xlink之后,图元的坐标+use元素里设置的坐标=显示的坐标<br>※ 还有在引用可重用元素也允许每次使用不同的属性值。<br>十七行:通过transform属性的scale和translate可以分别指定元素在的x、y方向的缩放量及元素在x、y方向上的便移量。<br>十八行…二十三行:这一段分别创建了SVG的六种基本形状:圆、椭圆、矩形、线、折线和多边形及路径。有关SVG的基本形状的详细介绍,请点击<br>链接SVG的基本形状。<br>请注意 url() 函数的使用。<br>二十四行:创建一个文本。有关文本的详细介绍,请点击链接输出文本。<br>二十五行:实现文本的换行显示。<br>二十六行:如何分别控制各行文本的属性。<br>二十七行:SVG 能将文本沿路径排列。要实现这一点,需创建一个链接到预定义的路径信息的textPath元素。在<defs>元素里定义的id=“wavyPath”的path对象即是。<br>二、SVG中常用的基本形状:<br>SVG 定义了六种基本形状,它们是圆(circle)、椭圆(ellipse)、矩形(rect)、线(line)、折线(polyline)和多边形(polygon),这些基本形状和路径(path)一道,可以组合成任意形状的图像。每个基本形状都带有<br>第 7 页 共 23 页<br>SVG 语法结构说明<br>指定其位置和大小的属性。它们的颜色和轮廓分别由fill、stroke、stroke-width属性确定。下面一一介绍其语法:<br>1.矩形<rect>标记允许你创建矩形或它的变体,比如正方形,圆角矩形等。语法如下:<br><rect x="80" y="53" width="189" height="52" style="fill:rgb(39,44,231); stroke:rgb(0,0,128); stroke-width:1"/><br>x属性定义了矩形左上角顶点在用户坐标系X轴上的坐标,缺省值为0;<br>y属性定义了矩形左上角顶点在用户坐标系Y轴上的坐标,缺省值为0;<br>width和height属性定义了矩形的宽度和高度,其中任意一个值为0,矩形都不显示<br>style属性允许我们定义SVG推荐标准支持的CSS样式属性。<br>fill属性定义了长方形的填充颜色,这里采用的是rgb的格式,SVG也支持颜色名和16进制的颜色格式,比如:fill:red或fill:#ff0000。<br>比如将填充红色,可以用fill=”red” 或用 fill=”rgb(255,0,0)” 亦或用 fill=”#ff0000”。<br>stroke属性定义边框线,SVG中,如果不定义,边框线没有任何宽度,换句话说,SVG默认边框线宽度为0,对所有的SVG的形状都是这样的。<br>如果需要定义边框线的话,采用这样的确语法格式:stroke:rgb(0,0,128)定义颜色,stroke-width:1定义宽度<br>我门还可以改变填充颜色的透明度,可以这样写:fill-opacity: 0.1,透明度范围是从0到1<br>也可以定义整个元素的透明度,opacity:0.5,该透明度对填充和边框线都有效<br>也可以单独定义边框线的透明度:stroke-opacity:0.8<br>定义圆角矩形,使用rx,ry属性定义圆角的半径。<br>rx定义圆角矩形的椭圆角在X方向的半轴长度。如果rx的值大于矩形宽度的一半,则取值矩形宽度的一半。<br>ry定义圆角矩形的椭圆角在Y方向的半轴长度。如果ry的值大于矩形高度的一半,则取值矩形高度的一半。<br>2.圆<circle>要定义一个圆,只需要指顶圆心的坐标、半径即可,也可使用样式单属性定义外观的样式,语法如下:<br>circle cx="143" cy="163" r="84" style="fill:rgb(192,192,255); stroke:rgb(0,0,128); stroke-width:1"/><br>其属性定义如下:<br>cx:是圆心在用户坐标系中的X坐标值,缺省值为0.<br>Cy:是圆心在用户坐标系中的Y坐标值,缺省值为0.<br>r:是圆的半径,不允许为负数。如果是0,则圆形不显示。<br>3.椭圆<ellipse>定义椭圆和定义圆很相象,指定圆心,X,Y轴的半径即可。语法如下:<br><ellipse cx="160" cy="163" rx="101" ry="81"<br>style="fill:rgb(192,192,255);stroke:rgb(0,0,128);stroke-width:1"/><br>其常用属性定义如下:<br>cx:是椭圆中心在用户坐标系中的X坐标值,缺省值为0.<br>cy:是椭圆中心在用户坐标系中的Y坐标值,缺省值为。。<br>rx:是X方向上椭圆的半轴长,不允许为负数。如果是0,则椭圆不显示。<br>ry:是Y方向上椭圆的半轴长,不允许为负数。如果是。,则椭圆不显示。<br>4.线段<line>通过指定开始点(x1,y1)、结束点(x2,y2)和宽度stroke定义一条直线。如:<br><line x1="127" y1="65" x2="127" y2="200" style="stroke:rgb(0,0,0);stroke-width:2"/><br>要想得到很细的线,可以指定stroke-width为大于0小于1的数值。<br>其常用属性定义如下:<br>X1:是线段起点的X坐标值,缺省值为0。<br>yl:是线段起点的Y坐标值,缺省值为。<br>x2:是线段终点的X坐标值,缺省值为0。<br>第 8 页 共 23 页<br>SVG 语法结构说明<br>y2:是线段终点的Y坐标值,缺省值为。<br>5.折线<polyline>这个标记通过指定各个点的坐标,来定义一条折线,格式如下:<br><polyline points="100,200 100,20 10,200 100,20" style="stroke:rgb(64,64,64);stroke-width:1"/><br>其主要属性为points:<br>points:表示折线各顶点坐标的一个列表,顶点坐标的格式为”x,y,其中x表示顶点的横坐标、x表示顶点的纵坐标,不同顶点坐标之间用空格分开。绘图程序将按照points中的顶点依次绘制图形。<br>6.多边形<polygon>这个标记用来指定连续的点的坐标来,定义多边形。语法如下:<br><polygon points="223.5,123.034 276,213.966 171,213.966"<br>style="fill:rgb(126,14,83);stroke:rgb(0,0,128);stroke-width:1"/><br>其主要属性为points<br>points:points的取值与折线的points一样,但是在绘制多边形的时候,绘图程序不但按照points中的顶点依次绘制图形,而且还将最后一个顶点与第一个顶点连接起来构成一个封闭图形。<br>注:在SVG中,允许使用浮点数来达到精确控制。<br>7.路径<path>标记是SVG中最复杂的,它创建最复杂的形状,也是最有用、用的最多的。语法如下:<br><path d="M10 20 L110 20 L110 120 L10 120" style="fill:rgb(0,0,153);<br>fill-opacity:0.5;stroke:rgb(0,0,153);stroke-width:4"/><br>用<path>元素生成一个简单的多边形。<br>路径是一系列命令,用来创建作为图像一部分精确定义的形状。该形状可以是开放的(如线)或闭合的(如多边形),并可以包含一条或多条线、<br>曲线和线段。<br>特别是在这两种情况下:第一,当图像需要曲线,它不能由多边形或折线创建,第二,当动画或文本需要沿页面上的特定形状前进时。这就需要<br>路径了。<br>下面是path标记的d属性使用的命令,指令解释如下:<br>M = 移动<br>L = 画直线<br>H = 水平画线<br>V = 垂直画线<br>C = 画曲线<br>S = 画平滑曲线<br>Q = 画贝塞尔曲线<br>T = 画平滑贝塞尔曲线<br>A = 画圆弧<br>Z = 关闭路径的描绘。<br>注:大写字母说明这些坐标是相对于整个坐标系统的绝对坐标。小写字母命令则指明为相对坐标。<br><path>标记的d属性用来描述下面要画的是多类型的形状,M10 20表示画笔移动到点10,20,L110 20表示从当前点画一条线到坐标110,20等,由于path标记采用的格式很复杂,因此,可以画出很复杂的形状,下面的语句在浏览器上画一个螺旋线:<br><path d="M156 334 C153.239 334 151 334 151 334 C151 339.523 153.239 344 156 344<br>C164.284 344 171 339.523 171 334 C171 322.954 164.284 314 156 314<br>C142.193 314 131 322.954 131 334 C131 350.568 142.193 364 156 364<br>C175.33 364 191 350.568 191 334 C191 311.909 175.33 294 156 294<br>C131.147 294 111 311.909 111 334 C111 361.614 131.147 384 156 384 第 9 页 共 23 页<br>SVG 语法结构说明<br>C186.375 384 211 361.614 211 334 C211 300.863 186.375 274 156 274"<br>style="fill:none;stroke:darkgreen;;stroke-width:2"/><br>(1) 坐标数据和指令之间的空格可以省略,但坐标致据之间的空格显然不能省略。<br>(2) 当绘制水平或垂直线段时,可以使用H和V命令代替L。使用H或h时,后面只需要加一个代表x坐标的参数,Y坐标映省与当前点相同。<br>同样,使用v或v时,后面也只需要加一个代表Y坐标的参数。如果这两个命令字母后面跟了多个数值,则每一个数值被认为是一次单独的绘制<br>线条的命令,而不像L和1命令那样把每两个数值结合起来作为一个点的一对坐标值来加以处理。<br>(3) 一对坐标值的XY坐标之间可以用空格或逗号隔开,但坐标对与坐标对之间只能用空格作为分隔符。<br>(4) 路径闭合命令虽然也有Z和z:两种形式,可效果是一样的,使用时没有区别。<br>(5) C 代表Curve(贝赛尔曲线控制),C5,45 45,45 45,5中的点(45,5)表示第2个点的位置,中间的两点(5,45),(45,45)分别代表前一个点<br>(5,5)和后一个点(45,5)之间的曲柄点的位置。<br>(6) S和s命令是绘制”光滑”三次贝塞尔曲线的命令。一条复杂的曲线由多个曲线弧段所构成,弧段与弧段之间要光滑衔接,各个弧段的控制点<br>必须满足一定条件。首先,这一段曲线弧的起点必须是前一段曲线弧的终点,否则连不上;其次,这一段曲线弧的第一控制点必须与前一段<br>曲线弧的第二控制点呈对称关系,对称中心是这段曲线弧的起点,只有这样才能保证曲线衔接处的光滑。S和s命令的语法<br>是”S X2 y2 destx desty”,省略了光滑曲线弧所隐含的第一个控制点的坐标。命令执行完后,当前点坐标同样停留在最后绘制的一段曲线弧<br>的终点上。<br>SVG中路径命令可以创建三种类型的曲线:<br><1>、椭圆曲线是椭圆的一部分,也称为弧。A(或a)命令通过指定起点、终点、x 和 y 轴半径旋度和方向来创建它们。弧命令的格式如下:<br>A radiusX, radiusY x-axis-rotation large-arc-flag, sweep-flag endX, endY<br>"x-axis-rotation"是此段弧所在的椭圆的X轴与水平方向的夹角,也即x轴的旋转角度;<br>large-arc-flag、sweep-flag决定了椭圆弧的绘制方向,值是0或1;<br>(endX,endY)是椭圆弧终点坐标。至于圆心坐标则是自动计算出来的。<br><2>、三次贝塞尔曲线由一个起点、一个终点和两个将曲线”拖”向自己的控制点定义。C(或c)命令(指定起点和终点)和 S (或s)命令<br>(假设这条曲线从最近的命令终止的地方继续)创建这些曲线。<br><3>、二次贝塞尔曲线与其三次贝塞尔曲线类似,不过仅包含一个控制点。Q(或q)和 T(或 t)命令可以创建这些曲线。<br>(曲线)续:<br>贝塞尔曲线的形状由起点和终点以及控制点的位置确定。这些命令的格式如下:<br>C control1x, control1y, control2x, control2y, endx, endy<br>S control2x, control2y, endx, endy<br>Q controlx, controly, endx, endy<br>T endx, endy<br>对于S和T命令,假设第一个控制点为前一条曲线的第二个控制点的反射。<br>由于描绘路径比较复杂,建议使用画图工具包来生成。<br>三、输出文本:<br>除了形状以外,SVG图像还可以通过text标注输出文本信息。SVG提供给设计人员对文本的大量控制,可以获得很好的图形效果。如: <text x="10" y="50" font-size="30">Welcome to the world of SVG!</text><br>第 10 页 共 23 页<br>SVG 语法结构说明<br><text>元素主要属性有:x,y,dx,dy,rotate,textLength,lengthAdjust<br>x,y表示文本的横纵坐标。<br>dx,dy表示移动的横纵坐标。<br>rotate表示旋转的度数。<br>任何可以在形状或路径上执行的操作(如绘制或滤镜)都可以在文本上执行。<br>一个不足之处是 SVG 不执行自动换行。如果文本比允许空间长,则简单地将它切断。多数情况下,创建多行文本需要多个文本元素。可以使用 tspan 元素将文本元素分成几部分,允许每部分有各自的样式。在 text 元素中,空格的处理与 HTML 类似;换行和回车变成空格,而多个空格压缩成单个空格。<br><text x="10" y="50" font-size="30">Welcome to the world of</text><br><tspan fill="red" font-size="20"> SVG!</tspan><br></text><br>四、颜色:<br>颜色对于 SVG 图像是极其重要的。单个颜色可以直接使用它们的 RGB 值指定,或者使用差不多 150 个颜色关键字中的一个来间接指定,该关键字也引用 RGB 值。R即RED;G即GREEN;B即BLUE。<br>采用rgb的格式表示为rgb(255,0,0)表示红色,rgb(0,255,0)表示绿色,rgb(0,0,255)表示蓝色。<br>RGB 值在 0 到 255 数值范围内指定一种颜色的红、绿、蓝成分的相对亮度。<br>SVG也支持颜色名和16进制的颜色格式,比如:fill:red或fill:#ff0000。五、SVG中显示中文: 解决步骤:<br>1、将文件存成UTF-8 操作:UltraEdit file->convisions->ASCII to UTF-8<br>2、要在svgviewer中显示中文字体,需要将中文字体名称进行”国际化”, 即将汉字字体名称改为英文名称,如将”宋体”改为”Simsun",”黑体”改为"Simhei"等,下面是部分字体对照列表:<br>English Name Localized Name SimSun 宋体 SimHei 黑体 FangSong_GB2312 仿宋_GB2312 KaiTi_GB2312 楷体_GB2312 YouYuan 幼圆 STSong 华文宋体 STZhongsong 华文中宋 STKaiti 华文楷体 STFangsong 华文仿宋 STXihei 华文细黑 STLiti 华文隶书 STXingkai 华文行楷 STXinwei 华文新魏 STHupo 华文琥珀 STCaiyun 华文彩云 FZYaoTi 方正姚体简体 FZShuTi 方正舒体简体 NSimSun 新宋体 LiSu 隶书<br>3、在SVG里这样写:<br>……<br><text style="fill:black;" font-size="30" font-family="SimSun"<br>x="100" y="100" width="200" height="30"> 小样,你给我显示中文撒 </text><br>……<br>六、变换:<br>在使用SVG时,象缩放、平移这样的操作就在所难免了。执行变换改变了元素所在的坐标系统,改变了它的外观。变换可以用来以数种方式改变元素的外观:<br>translate(x,y):该变换按指定数量偏移元素。<br>scale(x, y):该变换更改元素的大小。可以分别控制 x 和 y 方向上缩放量,但如果只指定一个值,那么它将用于两个方向。缩放量可以是负数。<br>rotate(n,x,y):对( x , y )旋转坐标轴。<br>第 11 页 共 23 页<br>SVG 语法结构说明<br>※若没有给旋转中心,则以原点为预设旋转中心。<br>需要注意的是,在旋转变换中使用的角度是以度为单位的,正的数值表明是顺时针方向,0度表示正东,90度表示正南等。<br>skewX(n)/ skewY(n) :这两种变换根据适当的轴按指定的像素数量偏斜元素。<br>也可以使用矩阵指定变换。<br>在具体使用时,需注意的是transform 属性的设置效果是一次性的而不是累加的,通过scale所进行的地图缩放是以地图的左上角为基点实施的。<br>对于复合变换,最关键的就是顺序了。<br>1.首先我们来了解一下图形变换的齐次式计算方法: 图1为基本几何变换齐次式<br>这是一个基本图形变换齐次式。等式的最右边是一个坐标点未变换前的坐标矩阵,最左边是该坐标点变换后所在位置的一个三行一列的坐标矩阵,中间那个三行三列的矩阵就是变换矩阵。不同的变换方式将对应不同的变换矩阵,图形平移效果就是通过这样一个变换齐次式来实现的。 平移:如果需要将图形平移(tx,ty)个坐标时,采用如下的变换矩阵带入变换方程。 图 2. 平移变换矩阵<br>缩放:如果需要在 x 轴方向实现 sx 倍缩放,在 y 轴方向实现 sy 轴缩放时,采用如下的变换矩阵带入变换方程。 图 3. 缩放变换矩阵<br>旋转:如果需要将图像旋转 a 度时,使用如下的变换矩阵带入变换方程。 图 4. 旋转变换矩阵<br>2.采用复合几何变换的数学模型分析<br>2.1.数学分析 当两组变换同时作用于同一个图像时,连续使用该等式,得出如下等式。由于做变换的时候是将变换矩阵放在矩阵积的左边,所以对于复合变换的式子,应该从右向左进行读。对于如下的式子:从右至左依次是变换前的坐标,第一次转换的转换矩阵,第二次转换的转换矩阵,转换后的坐标值。<br>图5.进行两次变换的复合矩阵<br>进一步推导 n 次几何变换的复合变换等式: 图 6. n次变换的复合矩阵<br>3.例子:放大一倍和平移50个像素的复合变换<g transform=" scale(2 ) translate(50 50)">,其对应的计算矩阵应为图7:<br>放大一倍和平移50个像素的复合变换<g transform=" translate(50 50) scale(2 )">,其对应的计算矩阵应为图8:<br>4.根据上面的分析我们可以看的出,<br>先进行缩放变换再进行平移变换的复合变换时,变换后原图元的坐标会映射到新的位置,其中: X1=Sx(X+dx) Y1=Sy(Y+dy)<br>先进行平移变换再进行缩放变换的复合变换时,变换后原图元的坐标会映射到新的位置,其中: X1=Sx*X+dx Y1=Sy*Y+dy<br>5. 一个常用复合变换实例的实现--定点变换<br>第 12 页 共 23 页<br>SVG 语法结构说明<br>所谓定点变换就是在图形变换中指定一个固定的点,在变换结束后,该点的位置不发生变化。定点变换在 GIS 的实际运用中很常见,比如将地图放大到指定倍数而保持地图的某个位置(如:鼠标点击的位置)不发生变化。我们以定点缩放为例描述定点变换的使用方法。 假设我们用(x1,y1)点来做定点变换的基准点进行几何变换,要求实现变换后(x1,y1)的位置不变。 定点变换的基本思想是基于这样一个特性:当图像进行缩放,或旋转变换的时候,坐标原点的位置并不发生变化。定点变换的实现方法就是,先将基准点(x1,y1)平移到原点即做一次[-x1,-y1]变换,进行变换后再将变换后的原点平移到(x1,y1)即再进行一次[x1,y1]变换。<br>图9基于(x1,y1)定点变换<br>語法:transform=”translate(-x × (n-1) , -y × (n-1) ) scale(n)”<br>七、viewBox:<br>讲viewBox不得不提SVG viewport(SVG视口)。视口(viewport)是SVG画布(SVG canvas)中定义的矩形区域,在区域中展现SVG内容。<br><一>viewport使用区域<br>1、用来放置物件的范围<br>2、可在此区域内订定坐标(长宽 单位长)<br>3、此区域可做叠合<br><二>坐标的设定<br>1、坐标的原点在左上角<br>2、坐标设定好后,接下来便可在此坐标上构图(构图要素:位置、大小etc.)<br>3、依单位不同,大小也会不同<br>4、一般说来,坐标系定义当前画布的位置和距离。视口坐标系统是从开始处理"svg"元素到处理viewBox特性之前处于活动的坐标系。<br>例如:<br><svg width="200" height="200"><br><rect x="10" y="10" width="50" height="30" style="stroke: black; fill: none;"/><br></svg><br><三>叠合(Nest)--在一個构图区域下,可以再包含构图区域<br>例如:<br><svg width="200" height"200" viewBox="0 0 200 200"><br><circle cx="25" cy="25" r="25" style="stroke: black; fill: none;"/><br><rect x="100" y="5" width="30" height="80" style="stroke: blue; fill: none;"/><br><svg x="100" y="5" width="30" height="80" viewBox="0 0 50 50"<br>preserveAspectRatio="xMaxYMax meet"><br><circle cx="25" cy="25" r="25" style="stroke: black; fill: none;"/><br></svg><br></svg><br>而viewBox表示的是当前的显示范围,viewBox中有四个数字,分别表示:<br>最小的x坐标,<br>最小的y坐标,<br>最大x坐标和最小x坐标之差,<br>最大y坐标和最小y坐标之差,<br>因此只要改变viewBox的值就可以实现SVG图象的放大和缩小。这就是viewBox放大、缩小的原理。<br>当分割后X Y的比例不一样时,将由preserveAspectRatio 属性确定如何实现缩放。<br>当preserveAspectRatio="xMinYMin meet"时,以较小单位为准;<br>当preserveAspectRatio="xMinYMin slice"时,以较大单位为准;<br>第 13 页 共 23 页<br>SVG 语法结构说明<br>当preserveAspectRatio="none"时, none 值将使图像伸展以适应框,即使这样会引起图像失真。xMinYMin值将图像的最小 x 和 y 值与框的最小 x 和 y 值对齐。其它可能的值有 xMinYMid、xMinYMax、xMidYMin、xMidYMid(缺省值)、xMidYMax、xMaxYMin、xMaxYMid 和 xMaxYMax。<br>Min,Mid,Max指显示位置。<br>八、使用CSS属性:<br>样式表(CSS)是网页制作中一种非常有效的定义文字和图片显示样式的方法。SVG支持CSS2的规范,可以自由的使用内部样式表,植入式样式表,外部样式表。样式表的定义包括:样式选择名和样式描述。下面的例子中,"st0"是样式选择名,"fill:red"是样式描述。.st0 {fill:red;} 通过样式选择名,创作者可以层叠的调用一些不同样式来获得不同效果,而这些样式只需要定义一次以后,就可以被反复的调用。如果你希望改变图形的属性,只需要修改样式描述就可以了。效率是不是一下提高了。<br>实际上,所有的属性(对于所有元素,不仅是文本)都可以用级联样式表与一个元素关联,并且文本的所有 CSS 属性都在 SVG 图像中可用。<br><defs> <style type="text/css"><br><![CDATA[<br>.abbreviation { text-decoration: underline; } rect { fill: red; stroke: blue; stroke-width: 3 }<br>]]><br></style><br></defs><br>九、链接:<br>在 SVG 中,通过一个 <a> 标签提供链接,这与 HTML 链接的方式几乎相同。将 <a> 标签与一个 xlink:href 属性结合使用便可以建立一个链接。在 <a>和 </a> 标签之间的所有内容都作为链接的一部分。清单展示了一个例子,它有三个元素,设置为链接到三个不同的 URL。单击这里以在浏览器中查看它们。 文本、矩形和多边形元素都有到不同页面的链接,这表明所有 SVG 元素 -- 不管是文本、圆还是不规则的多边形 -- 都可以作为一个链接。注意,如果将鼠标移动到这些元素上面,指针会相应地发生改变,表明这是一个链接语法如下:<br>清单.链接<br><svg><br><a xlink:href="http://www.w3.org//Graphics//SVG//Overview.htm8" target="blank"> <rect x="10" y="10" width="100" height="30" rx="10" ry="10" style="fill:lightgrey"/> <text x="30" y="30" font-size="12">Click here</text> </a> <a xlink:href="http://www.ibm.com//developerworks/" target="_top"> <circle cx="100" cy="100" r="50" style="fill:grey"/> <text x="80" y="100" font-size="12">Or here</text> </a> <a xlink:href="http://www.ibm.com/" target="new"> <polygon<br>points="60 160,165 172,180 60,290 290,272 280,172 285,250 255" style="fill:dimgrey"/> <text x="160" y="200" font-size="12">Or even here</text> </a><br></svg><br>注意xlink 中使用的 target属性值。它指示查看程序在单击这个元素时以何种方式打开一个新的浏览器窗口。<br>第 14 页 共 23 页<br>SVG 语法结构说明<br>十、SVG对事件的响应:<br>在SVG中,大多数元素(尤其是可视化元素)都具有自己的事件,这是SVG对DOM 的支持最基本的表现。事件的定义是作为元素的属性出现的,这些属性的值是一个子程序或者函数。当事件在一定条件下激发后,与事件相连接的子程序或者函数将被调用。下面的例子说明了如何使用事件的方法。<br><ellipse cx="10" cy="10" rx="20" ry="15" οnclick="func()"/><br>在SVG中,上面的代码显示一个椭圆。其中onclick属性定义了元素ellipse的一个单击事件,并指定事件的处理函数为func()。当用鼠标单击这个椭圆时,函数func()将被调用。SVG支持的事件比较多。<br>对于一般的可视化元素(如形状、文字、路径等)的事件属性有:onfocusin, onfocusout, onactivate, onclick, onmousedown,onmouseup, onmousemove和。Nmouseout;<br>对于文档一级的元素(如<svg>元素)的事件属性有:onload, onunload, onabort, onerror, onresize, onscroll和orlzoom;<br>对于实现动画的的元素的事件属性有:onbegin, onend和onrepeat。这些事件都与DOM2的规范一致,如果使用DOM规范,脚本还可以注册自己的特定事件以进行处理。另外,许多事件的可用与否取决于SVG客户端解释程序是否支持这些事件,大多数DOM2的标准事件都是支持的。此外,可能还支持一些额外的事件,如可视化元素与键盘输人有关的事件。onkeypress, onkeyup, onkeydown等。<br>十一、<g>组和<symbol>元素的区别:<br>一个很简单的区别就是:<g>是绘图对象,,而<symbol>不是。也就是说<g>下面的图形对象将被直接绘制在终端设备表面,而<symbol>一般用于预定义的图元,通过<use>引用实现重复应用。<br>在功能上,你可以把<symbol>对象看成是放在<defs>节点中的<g>对象,就是这样,在<defs>节点内部,<g>和<symbol>基本上一样。但是如果不在<defs>内部,<g>内部的形状对象将被直接绘制,而<symbol>不能。比较一下这两段代码:<br><svg width="640" height="480" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"><br><g ><br><rect x="251" y="183" width="98" height="63" fill="#F30606" stroke="#000000" /><br></g><br></svg><br>这将绘制一个红色矩形。如果将上面代码将<g>替换成<symbol>将不会绘制任何东西。<br>但是对于下面这段代码,将<g>和<symbol>互相替换则效果都是一样<br><defs><br><symbol overflow="visible" id="symbol"><br><rect x="251" y="183" width="98" height="63" fill="#FF0000" stroke="#000000" /><br></symbol><br></defs><br><use xlink:href="#symbol" /><br>另外<symbol>对象可以通过viewBox属性控制视图显示,而<g>不能。所以对于预定义图元,推荐使用symbol,表现力要多一些。symbol相对于<g>有更多属性,如viewBox,overflow等,可以更多控制引用对象的表现方式。Owerflow可以理解为溢位或溢流,将overflow的值设置为visible,这样在symbol中的超出视图正常范围的图元就会完整显示出来了。<br>这是比较简单的区别。<br>十二、标记:<br>标记是对路径的自然补充。它们是可以添加到线和路径起点、终点和顶点的元素。最常用的是将箭头添加到线的终点,不过可以使用任何对象。<br>过程很简单:定义标记,然后使用 marker-start、marker-end 和 marker-mid 属性将其赋值给相关元素。例如:<br>第 15 页 共 23 页<br>SVG 语法结构说明<br><?xml version="1.0" standalone="no"?><br><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"<br>"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"><br><svg width="4cm" height="4cm" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg"><br><desc>Markers</desc><br><defs><br><marker id="arrow" viewBox="0 0 10 10" refX="0" refY="5"<br>markerUnits="strokeWidth" markerWidth="3" markerHeight="10" orient="auto"><br><path d="M 0 0 L 10 5 L 0 10 z" fill="yellow" stroke="black"/><br></marker><br></defs><br><rect x="1" y="1" width="398" height="300" fill="none" stroke="blue" /><br><!-- First row --><br><path d="M75,100 c25,-75 50,50 100,0 s50,-50 150,50" stroke="purple" stroke-width="5" fill="none"<br>marker-start="url(#arrow)"<br>marker-mid="url(#arrow)"<br>marker-end="url(#arrow)" /><br><!-- Second row --><br><path d="M75,200 c25,-75 50,50 100,0 s50,-50 150,50" stroke="purple" stroke-width="3" fill="none"<br>marker-start="url(#arrow)"<br>marker-mid="url(#arrow)"<br>marker-end="url(#arrow)" /><br></svg><br>这个标记本身由一个简单的三角形路径组成,它由标记属性决定。已经设置了 viewBox,以便不管框是什么,标记本身总是会填充整个框。因为 markerUnits 值的缘故,框本身受应用标记线的大小影响。markerUnits 属性也被设置为 userSpaceOnUse,这使标记使用常规坐标系统。refX 和 refY 属性确定标记(该标记”附加”到它所标记的线)内的点。最后,标记的方位设为 auto,使它的 Y 轴与线的切线垂直。(为了理解这一方位,标记构建为指向 X 轴方向)。<br>请注意标记大小随笔划大小的改变而改变:<br>十三、SVG优点:<br>SVG 文件可以被很多的工具(比如记事本)阅读和编辑。<br>SVG 文件比 JPEG和GIF更小压缩比更大。<br>SVG图像是可压缩的。<br>SVG图像可以以任何分辨率高清晰打印。<br>SVG图像是可缩放的。图像的任何部分都可以无损失缩放。<br>SVG里的文字是可供选择和搜索(制作地图的良好功能)。<br>SVG支持交互和动画。<br>SVG是一个开放标准。<br>SVG文件是纯XML的。<br>SVG支持Xlink 和Xpointer。<br>十四、SVG主要元素和属性:<br><text x y textLength lengthAdjust><br>第 16 页 共 23 页<br>SVG 语法结构说明<br><text>元素详解<br><text>的几点属性<br>text元素用x和y属性定义文字的位置。Text主要属性还有Text dx,dy,rotate,textLength,lengthAdjust:<br>x,y表示文本的横纵坐标。<br>dx,dy表示移动的横纵坐标。<br>rotate表示旋转的度数。<br>text元素默认是左对齐,可以用text-anchor子属性指定文字的对齐方式:<br>文本左对齐: text-anchor="start"<br>文本居中: text-anchor="middle"<br>文本右对齐: text-anchor="end"。<br>SVG对文本的控制一个不足之处是 SVG 不执行自动换行。如果文本比允许空间长,则简单地将它切断。多数情况下,创建多行文本需要多个文本元素。不过,可以使用 tspan 元素将文本元素分成几部分,允许每部分有各自的样式。在 text 元素中,空格的处理与 HTML 类似;换行和回车变成空格,而多个空格压缩成单个空格。<br><tspan x y dx dy rotate>从属于<text><br>tspan元素主要属性有:x,y,dx,dy,rotate,textLength,lengthAdjust,其属性解释同text。<br><svg> <text style="fill:#000000;font-family:Arial;font-weight:bold;font-size:40;"> <tspan x="50" y="60,70,80,80,75,60,80,70">COMMUNICATION</tspan> <tspan x="50" y="150" dx="0,15" dy="10,10,10,-10,-10,-10,10,10,-10">COMMUNICATION</tspan> <tspan x="50" y="230" rotate="10,20,30,40,50,60,70,80,90,90,90,90,90">COMMUNICATION</tspan> </text> </svg><br><tref xlink:href="#">引用<defs>中的<text><br>文本内容可以用text元素直接包含进来,或者用tref元素引用进来。<br>主要属性有:x,y,dx,dy,rotate,textLength,lengthAdjust,xlink:href<br>xlink:href属性指定引用的url。其他属性同上<br>例如:<br><svg><br><defs> <text id="ReferencedText"> Referenced character data </text> </defs> <desc> inline vs reference text content</desc> <text x="100" y="100" font-size="45" fill="blue" > Inline character data </text> <text x="100" y="200" font-size="45" fill="red" > <tref xlink:href="#ReferencedText"/> </text><br></svg><br><textPath startOffset= method="align|stretch" spacing="exact|auto" xlink:href="">注意嵌套的<tspan>对后面的走向有叠加作用<br><textPath>主要属性有:startOffset,textLength,lengthAdjust,method,spacing startOffset设置文字开始的位置。startOffset = "<length>"<br>第 17 页 共 23 页<br>SVG 语法结构说明<br>method设置文字与路径的位置关系。method = "align | stretch" align为默认值。 spacing设置文字与路径的空间。spacing = "auto | exact" exact为默认值。 xlink:href设置绑定的路径。<br>例如:<br><svg><br><defs> <path id="MyPath" d="M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100" /> </defs> <desc> tspan within textPath</desc> <use xlink:href="#MyPath" fill="none" stroke="red" /> <text font-family="Verdana" font-size="42.5" fill="blue" > <textPath xlink:href="#MyPath"> We go <tspan dy="-30" fill="red" > up </tspan> <tspan dy="30"> , </tspan><br>then we go down, then up again </textPath> </text> <!-- Show outline of canvas using 'rect' element --> <rect x="1" y="1" width="998" height="298" fill="none" stroke="blue" stroke-width="2" /> </svg><br>fill-rule属性 fill-rule="nonezero|evenodd"<br>fill-rule属性详解:<br>fill-rule<br>Value: nonzero|evenodd|inherit<br>Initial: nonzero<br>Applies to: shape and text content elements<br>Inherited: yes<br>Percentages: N/A<br>Media: visual<br>Animatable: yes<br>fill-rule属性指定了决定那一部分是图形的内部的运算规则。对一个没有交叉的路径来说,那一部分属于它的内部是很显然的,但是对于复杂一点的路径来说,内部的阐明并不明显。<br>fill-rule属性提供了两种怎样决定图形内部的两种选择:<br>nonzero: 本规则决定一个点是否在图形内部的方法是从该点向任意方向画直线,然后检查直线与图形的交叉。如果该点左右与图形交叉点数相同,则该点在图形外,否则在图形内。<br>evenodd: 本规则通过从一点向任意方向画直线然后计算该直线与图形的交叉电的数量来决定该点是否在图形内。如果交叉点数为奇数,则该点在图形内,否则在图形外。<br>fill:该属性指定用来填充对象内部区域的颜料。大多数情况下,该属性只是一种颜色,但它也可以是渐变或图案。这个值通常是关键字、<br>颜色说明或指向预定义元素的 URI。属性是对图形或字符串中字符内部着色的操作。可采用的是rgb的格式,SVG也支持颜色名和16进制的颜色格式,比如:fill:red或fill:#ff0000。如果指定一个元素没有填充色(使用fill=“none”),那么在它下面的各项会显现出来。<br>第 18 页 共 23 页<br>SVG 语法结构说明<br>注意:R、G、B就是Red、Green、Blue(红,绿,蓝)三种颜色。<br>stroke:该属性指定元素外边框的外观。象 fill 一样,它引用颜料,尽管通常将它指定为一种简单颜色。stroke后面可使用的值: none, current-color, (color)。笔划属性决定了物件是否利用笔划进行勾勒,并且使用什么样颜色的笔画."none"是无色,"Current-color"返回的是一个父文档(可以是XML文档或者SVG文档)的颜色值,(color)是自定义的色彩<br>stroke-width:该属性指定笔划线的宽度,控制图形的外轮廓。 stroke-width后可使用的值是: (width), inherit。<br>"笔划宽度"默认值是1像素宽度.用户也可以自定义宽度,可以使用像素值也可以使用百分比。<br>这里的所有SVG图像都使用的是像素值."inherit"代表继承前面(父)的物件(或物件组)的笔划属性。<br>与对象的笔划或线以及对象内部区域的填充相关的属性及子属性还有:<br>fill-opacity:该属性指定元素的透明性。值的范围从完全透明(0)到完全不透明(1)。<br>stroke-linecap:该属性确定线末端的形状,可取的值有粗端(缺省值)、圆和正方形。<br>stroke-linecap可使用的值是: butt, round, square, inherit "笔划端点"的属性定义了开放笔划(未闭合)的端点的形状,分别是"粗大的"butt,"圆滑的"round,"平整的"square和"继承的"inherit。<br>stroke-linejoin:该属性确定对象各角的外观。允许的值有直角(缺省值)、圆和斜角,如将尖角的边缘”剪掉”:stroke-linejoin=“bevel”。<br>stroke-linejoin可使用的值是:miter, round, bevel, inherit。笔划连接属性定义了路径拐角的形状,"miter"是默认值,"round"光滑连接,"bevel"折线连接,"inherit"继承。<br>stroke-miterlimit:stroke-miterlimit后可使用的值是: (miterlimit), inherit "笔划圆角连接"定义了两条相交成一定角的线在连接处的圆滑程度.数值必须为大于1的整数,默认的值是8。<br>stroke-dasharray:虚线比划。该属性是一个整数系列(如 3、2、3、2、4、3、2 和 3),它允许对虚线中每一划的相对长度进行控制。<br>stroke-dasharray的附值个数如果是偶数就表示为画多少空多少的形式;如果是奇数就自动在后面加相同的数形成偶数,比如1 2 3就会变成1 2 3 1 2 3 于是就可以表示为画多少空多少的形式。<br>stroke-opacity:类似于 fill-opacity,该属性确定元素笔划线的相对透明性。<br>opacity属性定义整个元素的透明度如,该透明度对填充和边框线都有效。opacity具有继承性和迭加性<br>stroke-dashoffset="0|" 表示描边时使用描边模板(如线型、渐变色彩等)的起始偏移量,缺省值是0,即从头开始。<br><maker makerWidth makerHeight makerUnits refX refY orient><br>marker-start:url(#) marker-mid:url(#) marker-end:url(#)<br><marker>元素<br>markerUnits 属性也被设置为 userSpaceOnUse,这使标记使用常规坐标系统。refX 和 refY 属性确定标记(该标记”附加”到它所标记的线)内的点。最后,标记的方位设为 auto,使它的 Y 轴与线的切线垂直。(为了理解这一方位,标记构建为指向 X 轴方向)。<br>定义标记,然后使用 marker-start、marker-end 和 marker-mid 属性将其赋值给相关元素。<br>请注意标记大小随笔划大小的改变而改变。<br><a xlink:href= xlink:type="simple" xlink:show="new|replace" xlink:title xlink:actuate="onRequest" target="_top|_self"><br>第 19 页 共 23 页<br>SVG 语法结构说明<br><mask id maskUnits="objectBoundingBox|userSpaceOnUse" x= y= width height mask="url()"><br>十五、在SVG文档中遍历子节点:<br>在ASV中,节点下的空白也作为一个节点计算。<br><g><g></g></g><br><g><br><g></g><br></g><br>这两个是有区别的。<br>#text空白节点。<br>可见遍历循环的条件取决于原始文档中节点的写法,这是我们不希望的。因此,正确的方法是,总是遍历所有子节点,然后根据节点的名称进行过滤。特别是在编写可以不同的SVG浏览器中移植的代码时,使用上述方式尤为重要,因为不同的浏览器对子节点遍历的处理是不一样的。Batik对子节点数量的处理和ASV就不同,Batik就不计算空白节点的数量(好像这种方式编程人员更喜欢)。因此,如果希望脚本可以在ASV和Batik下都可以运行,就必须在遍历循环中对节点名称进行判断。<br>十六、SVG一些基础常识补充:<br>1、从本质上来说,SVG文档是XML文档。这就是说SVG有某些基本属性:<br><1>、所以的标记都有开始标记和结束标记,否则必须注明为空标记。空标记用反斜杠结束,如<rect />。<br><2>、标记必须正确嵌套。如果一个标记在另一个标记中开始,那么它也必须在那个标记中结束。<br><3>、文档必须只有一个根。一个 <svg></svg>根元素也包含一个 SVG文档的所有内容。<br><4>、文档应该以 XML 声明 <?xml version=“1.0”?> 开始。<br><5>、文档应该包含一个 DOCTYPE 声明, 该声明指向一个允许元素的列表。<br><6>、当组合多种不同元素时,SVG图象严格按顺序放置各项,每个后继层放置在那些已放置层的上面。如果指定一个元素没有填充色(使用fill=“none”),那么在在它下面的各项会显示出来。<br>2、container element 容器元素<br>一种包含图形和其他容器元素作为子元素的元素,特别是:<br><svg>、<g>、<defs>、<symbol>、<clipPath>、<mask>、<pattern>、<marker>、<a>、 <switch>。<br>3、current transformation matrix (CTM) 当前变换矩阵(CTM)<br>变换矩阵是将一个坐标系转换成另一个坐标系的数学表达是,通常用3x3的矩阵,采用方程式[x′ y′ 1] = [x y 1]。当前变换矩阵(CTM)定义用户坐标系统到显示窗口坐标系统的变换。参见坐标系统变换(Coordinate system transformations)。<br>4、graphics element 图形元素<br>图形元素是可以用来在目标画布上画出图形的元素。特别是:<br><path>、<text>、<rect>、<circle>、<ellipse>、<line>、<polyline>、<polygon>、<image>、<use>等。<br>5、graphics referencing element 图形参考元素<br>用对不同文档或元素的引用作为其图形内容的图形元素。特别是:<use> and <image>。<br>6、local URI reference 本地RUI引用<br>是指不包含绝对URI(<absoluteURI>)和相对定位符(<relativeURI>)的统一资源定位符(Uniform Resource Identifier [URI]),它描绘一个引用指向当前文档的一个元素。参见<defs>元素。<br>7、non-local URI reference 非本地URI引用<br>第 20 页 共 23 页<br>SVG 语法结构说明<br>是指包含绝对URI(<absoluteURI>)或相对定位符(<relativeURI>)的统一资源定位符(Uniform Resource Identifier [URI]),它描绘一个引用指向不同文档的或不同文档中的某个元素。参见<defs>元素。<br>8、paint 着色<br>着色是指将颜色值呈现在画布上的方法,包含有颜色值和合成alhpa值。色值控制着画布上的颜色与现有颜色的混合效果。SVG支持三种内置着色:实心色(color)、梯度(gradients)和模式(patterns)。<br>9、text content element 文本内容元素<br>一个可以定义文本串的画在画布上的SVG元素,SVG文本内容元素有:<br><text>、<tspan>、<tref>、<textPath>、<altGlyph>等。<br>10、transformation 变换<br>是指当前变换矩阵(CTM)的改变,由追加的变换以一组简单变换定义(如缩放、旋转和平移)提供,也可由一组或多组变换矩阵(transformation matrices)提供。<br>11、transformation matrix 变换矩阵<br>变换矩阵是将一个坐标系转换成另一个坐标系的数学表达是,通常用3x3的矩阵,采用方程式<br>[x′ y′ 1] = [x y 1]。<br>12、URI Reference URI引用<br>是一个统一资源定位符([URI])作为一个引用指向文件或文件中的一个元素。<br>13、user coordinate system 用户坐标系统<br>一般说来,坐标系定义当前画布的位置和距离。但前用户坐标系是当前活动的,用来定义当前画布上的坐标和长度如何分别定位和计算的坐标系统。<br>14、user space 用户空间<br>是用户坐标系统(user coordinate system)的同义词。<br>15、VG viewport SVG视口<br>视口(viewport)是SVG画布(SVG canvas)中定义的矩形区域,在区域中展现SVG内容。<br>16、viewport 视口<br>视口(viewport)是SVG画布(SVG canvas)中定义的矩形区域,在区域中展现SVG内容。<br>17、viewport coordinate system 视口坐标系统<br>一般说来,坐标系定义当前画布的位置和距离。视口坐标系统是从开始处理”svg”元素到处理viewBox特性之前处于活动的坐标系。在这种<br>情况下,一个包含在父文档中并带有CSS样式定义的SVG文档片断,视口坐标系统就与其原有的CSS具有相同的方位和长度,原来的左上坐标<br>位视口的左上坐标。<br>18、我们可以定义一个视口坐标系和用户坐标系,缺省的情况下两者是一致的,度量单位也相同,如果属性值没有带单位,则使用用户坐标系的长度<br>单位-像素(px)。大多数情况下,用户坐标系的原点处在视口的左上角,X轴的正向朝右,Y轴的正向朝下,即如果不进行坐标变换,一切渲染<br>都是以初始坐标系为准。<br>19、透明度<br>在SVG中,使用style属性指定fill-opacity,stroke-opacity和opacity的值,可以控制图象的透明度。例如:fill-opacity表示填充颜色的透明程度。stroke-opacity表示线条颜色的透明程度。可取值的范围是从1到0;1表示完全不透明,<br>0表示完全透明;如果图象是完全透明的(opacity=0),那么图象就看不见了。<br>20、线条<br>例如:<br><circle style="fill:none;stroke:blue;stroke-width:3;stroke-dasharray: 5 5 15 25" cx="130" cy="180" r="100"/><br>在SVG的style属性中,stroke控制线条的颜色,stroke-width控制线条的宽度,stroke-dasharray<br>第 21 页 共 23 页<br>SVG 语法结构说明<br>是用来描述线段和空隙长度的。第1个<br>"5"表示小线段的长度,第2个"5"表示小线段和长线段之间的长度,"15"表示长线段的长度,"25"表示长线段到短线段之间的长度。事实上,<br>可以给上述数字序列再添上几个数字,那么该圆的边框线段和空隙就更多了。<br>21、<g>组元素和<symbole>元素的区别<br>一个很简单的区别就是,<g>是绘图对象,而<symbol>不是,也就是说<g>下面的图形对象将被直接绘制在终端设备表面,而<symbol>一般用于预定以的图元,通过<use>应用实现重复应用。<br>在功能上,你可以把<symbol>对象看成是放在<defs>节点中的<g>对象,就是这样,在<defs>节点内部,<g>和<symbol>基本上一样。但是如果不在<defs>内部,<g>内部的形状对象将被直接绘制,而<symbol>不能。<br>比较一下这两行代码:<br><svg width="640" height="480" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"><br><g ><br><rect x="251" y="183" width="98" height="63" fill="#F30606" stroke="#000000" /><br></g><br></svg><br>这将绘制一个红色矩形<br>如果将上面代码将<g>替换成<symbol>将不会绘制任何东西<br>但是对于这个代码,将<g>和<symbol>互相替换则效果都是一样<br><defs><br><symbol overflow="visible" id="symbol"><br><rect x="251" y="183" width="98" height="63" fill="#FF0000" stroke="#000000" /><br></symbol><br></defs><br><use xlink:href="#symbol" /><br>另外<symbol>对象可以通过viewBox属性控制视图显示,而<g>不能;所以对于预定以图元,推荐使用symbol,表现力要多一些。<br>这是比较简单的区别,详细的东西建议看一下规范,symbol相对于<g>有更多属性,如viewBox,overflow等,可以更多控制引用对象的表现方式。<br>22、SVG(Scalable Vector Graphics) 由万维联盟W3C 推出的可用来生成二维的图形、动画技术。<br>23、SVG文档的基本组成部分是元素(Element)。最新的SVG112 标准草案使人们得以处理声音、视频等多媒体内容。<br>24、SVG动画与SMIL 的关系<br>SVG动画模块是SVG工作组与SYMM(W3C Synchronized Multimedia) 工作组合作开发出来的, SYMM工作组开发了SMIL (Synchronized Multimedia Integration Language) 标准, 用来在网页上展示各种多媒体内容, 包括SVG 格式的内容. SMIL110 没有动画模块,SMIL210 增添了动画模块。<br>SMIL 定义有4 个基本动画元素: animate , set , animateMotion ,animateColor. 这些元素有一般的属性, 如from , to , values 等, 也有<br>用于样条动画(Splin2eAnimation) 的专用属性, 如path , keyTimes , keySplines。<br>25、SVG动画与DOM的关系<br>很多SVG动画是用Javascript 编程实现的, Javascript 通过SVG的DOM(Document Ob2ject Model , 文档对象模型) 与SVG文档联系在一起, 控制SVG的元素及属性, 动态修改SVG元素的属性, 从而生成特定的动画效果。<br>由万维联盟发布的DOM规范是一组平台和语言无关的应用程序编程接口, 能够用来描述如何访问和处理XML 和HTML 文档信息, DOM将XML 和HTML 文档以树状结构进行描述。<br>26、命名空间<br>需要特别指出的是用于创建超级链接节点的相关代码,当需要创建超级链接节点的时候需要明确指出节点的命名空间"http://www.w3.org/2000/svg",为节点设置链接属性的时候也必须指定属性的命名空间<br>第 22 页 共 23 页<br>SVG 语法结构说明<br>"http://www.w3.org/2000/xlink/namespace/"。关于命名空间在 SVG 中的意义我们可以通过在Batik 中的脚本改写来深刻体会其中的内涵。<br>27、ECMAScript是ECMA(European Computer Manufacturers Association)制定的标准脚本语言(JAVAScript)。<br>28、在SVG文档中遍历子节点<br><g><g></g></g><br><g><br><g></g><br></g><br>这两个有区别<br>#text空白节点<br>第 23 页 共 23 页</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1289116705695539200"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(SVG文档语法结构)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835507248395284480.htm" title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a> <span class="text-muted">广龙宇</span> <a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div> </li> <li><a href="/article/1835504217729626112.htm" title="Python教程:一文了解使用Python处理XPath" target="_blank">Python教程:一文了解使用Python处理XPath</a> <span class="text-muted">旦莫</span> <a class="tag" taget="_blank" href="/search/Python%E8%BF%9B%E9%98%B6/1.htm">Python进阶</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代</div> </li> <li><a href="/article/1835490218845761536.htm" title="Python爬虫解析工具之xpath使用详解" target="_blank">Python爬虫解析工具之xpath使用详解</a> <span class="text-muted">eqa11</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>文章目录Python爬虫解析工具之xpath使用详解一、引言二、环境准备1、插件安装2、依赖库安装三、xpath语法详解1、路径表达式2、通配符3、谓语4、常用函数四、xpath在Python代码中的使用1、文档树的创建2、使用xpath表达式3、获取元素内容和属性五、总结Python爬虫解析工具之xpath使用详解一、引言在Python爬虫开发中,数据提取是一个至关重要的环节。xpath作为一门</div> </li> <li><a href="/article/1835466523163062272.htm" title="Linux sh命令" target="_blank">Linux sh命令</a> <span class="text-muted">fengyehongWorld</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容</div> </li> <li><a href="/article/1835466270955368448.htm" title="Linux vi常用命令" target="_blank">Linux vi常用命令</a> <span class="text-muted">fengyehongWorld</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>参考资料viコマンド(vimコマンド)リファレンス目录一.保存系命令二.删除系命令三.移动系命令四.复制粘贴系命令一.保存系命令⏹保存并退出:wq⏹强制保存并退出:wq!⏹退出(文件未编辑):q⏹强制退出(忽略已编辑内容):q!⏹另存为:w新文件名二.删除系命令⏹删除当前行dd⏹清空整个文档gg:移动到文档顶部dG:删除到最后一行ggdG三.移动系命令⏹移动到文档顶部gg⏹移动到文档底部#方式1G</div> </li> <li><a href="/article/1835463622344667136.htm" title="基于Python给出的PDF文档转Markdown文档的方法" target="_blank">基于Python给出的PDF文档转Markdown文档的方法</a> <span class="text-muted">程序媛了了</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>注:网上有很多将Markdown文档转为PDF文档的方法,但是却很少有将PDF文档转为Markdown文档的方法。就算有,比如某些网站声称可以将PDF文档转为Markdown文档,尝试过,不太符合自己的要求,而且无法保证文档没有泄露风险。于是本人为了解决这个问题,借助GPT(能使用GPT镜像或者有条件直接使用GPT的,反正能调用GPT接口就行)生成Python代码来完成这个功能。笔记、代码难免存在</div> </li> <li><a href="/article/1835461934770647040.htm" title="2020-8-19晨间日记:看过的电影" target="_blank">2020-8-19晨间日记:看过的电影</a> <span class="text-muted">盐大虾</span> <div>今天是周三起床:6点半就寝:11点天气:晴心情:正常纪念日:周三任务清单今日完成的任务,最重要的三件事:1.整理写过的文档2.电影《电灯泡》3.这就是街舞第三季第五期改进:早睡早起习惯养成:早睡早起,看书周目标·完成进度两篇文章学习·信息·阅读电影艺术发展史相关教材健康·饮食·锻炼吃了挺多零食,还喝了果粒橙,还是得少吃,多锻炼,不然会慢慢死掉的。人际·家人·朋友淡定交流,不放在心上。工作·思考专心</div> </li> <li><a href="/article/1835443013749403648.htm" title="入门MySQL——查询语法练习" target="_blank">入门MySQL——查询语法练习</a> <span class="text-muted">K_un</span> <div>前言:前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。1.员工示例数据库导入官方文档员工示例数据库介绍及下载链接:https://dev.mysql.com/doc/employee/en/employees-installation.h</div> </li> <li><a href="/article/1835428821877223424.htm" title="计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)" target="_blank">计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)</a> <span class="text-muted">java毕设程序源码王哥</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:phpStudy+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:原生PHP++Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发</div> </li> <li><a href="/article/1835417097660887040.htm" title="Linux CTF逆向入门" target="_blank">Linux CTF逆向入门</a> <span class="text-muted">蚁景网络安全</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/CTF/1.htm">CTF</a> <div>1.ELF格式我们先来看看ELF文件头,如果想详细了解,可以查看ELF的manpage文档。关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离+-------------------+|ELFheader|---++--------->+-------------------</div> </li> <li><a href="/article/1835402227448115200.htm" title="APQP,ASPICE,敏捷,功能安全,预期安全,这些汽车行业的一堆标准" target="_blank">APQP,ASPICE,敏捷,功能安全,预期安全,这些汽车行业的一堆标准</a> <span class="text-muted">二大宝贝</span> <a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E6%9E%B6%E6%9E%84/1.htm">安全架构</a> <div>前言APQP,ASPICE,敏捷,功能安全,预期安全,PMP,PRICE2汽车行业的有这样一堆标准。我是半路出家来到汽车行业做项目经理的,对几个标准的感觉是,看了文档和各种解析之后还是一头雾水,不知道到底说了个啥,别人问我还是一脸懵逼。APQP(TS16949的最重要工具),ASPICE(软件)这些是质量标准,是优化整个公司体系的,但这套体系对项目管理有要求;敏捷,PMP这些是项目管理的标准;项目</div> </li> <li><a href="/article/1835401975269781504.htm" title="vue render 函数详解 (配参数详解)" target="_blank">vue render 函数详解 (配参数详解)</a> <span class="text-muted">你的眼睛會笑</span> <a class="tag" taget="_blank" href="/search/vue2/1.htm">vue2</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>vuerender函数详解(配参数详解)在Vue3中,`render`函数被用来代替Vue2中的模板语法。它接收一个h函数(或者是`createElement`函数的别名),并且返回一个虚拟DOM。render函数的语法结构如下:render(h){returnh('div',{class:'container'},'Hello,World!')}在上面的示例中,我们使用h函数创建了一个div元素</div> </li> <li><a href="/article/1835399577818198016.htm" title="linux脚本sed替换变量,sed 命令中替换值为shell变量" target="_blank">linux脚本sed替换变量,sed 命令中替换值为shell变量</a> <span class="text-muted">诺坎普之约</span> <a class="tag" taget="_blank" href="/search/linux%E8%84%9A%E6%9C%ACsed%E6%9B%BF%E6%8D%A2%E5%8F%98%E9%87%8F/1.htm">linux脚本sed替换变量</a> <div>文章目录sed命令中替换值为shell变量替换基本语法sed中替换使用shell变量总结参考文档sed命令中替换值为shell变量替换基本语法大家都是sed有很多用法,最多就应该是替换一些值了。让我们先回忆sed的替换语法。在sed进行替换的时候sed-i's/old/new/g'1.txtecho"hellooldfrank"|sed's/old/new/g'结果如下:hellonewfrank</div> </li> <li><a href="/article/1835380863848771584.htm" title="高仿一个echarts饼图" target="_blank">高仿一个echarts饼图</a> <span class="text-muted">街角小林2</span> <div>开头饼图,很常见的一种图表,使用任何一个图表库都能轻松的渲染出来,但是,我司的交互想法千奇百怪,布局捉摸不透,本身饼图是没啥可变的,但是配套的图例千变万化,翻遍ECharts配置文档都还原不出来,那么有两条路可以选,一是跟交互说实现不了,说服交互按图表库的布局来,但是一般交互可能会对你灵魂拷问,为什么别人都能做出来,你做不出来?所以我选第二种,自己做一个得了。用canvas实现一个饼图很简单,所以</div> </li> <li><a href="/article/1835373604464848896.htm" title="python中文版下载官网-Python下载 v3.8.3 官方中文版" target="_blank">python中文版下载官网-Python下载 v3.8.3 官方中文版</a> <span class="text-muted">weixin_37988176</span> <div>Python中文版是一款非常专业的通用型计算机程序设计语言安装包,Python具有比其他语言更有特色语法结构,而且在设计上坚持了清晰划一的风格,使得它成为一门易读、易维护并且被大量用户所欢迎的、用途广泛的语言,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python中文版软件介绍Python中文版是一门跨平台的脚本语言,Python规定了一个Python语法规则,实</div> </li> <li><a href="/article/1835373236217540608.htm" title="360前端星计划-动画可以这么玩" target="_blank">360前端星计划-动画可以这么玩</a> <span class="text-muted">马小蜗</span> <div>动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能</div> </li> <li><a href="/article/1835365412099944448.htm" title="Vue3 vant组件库自动导入" target="_blank">Vue3 vant组件库自动导入</a> <span class="text-muted">不叫虎子</span> <a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a> <div>实现:完整使用vant组件库文档安装:#Vue3项目,安装最新版Vantnpmivant#通过yarn安装yarnaddvant#通过pnpm安装pnpmaddvant【一】按需引入:https://vant-contrib.gitee.io/vant/#/zh-CN/quickstart#fang-fa-er.-an-xu-yin-ru-zu-jian-yang-shi【二】批量引入在基于vit</div> </li> <li><a href="/article/1835342718067372032.htm" title="Python精选200Tips:121-125" target="_blank">Python精选200Tips:121-125</a> <span class="text-muted">AnFany</span> <a class="tag" taget="_blank" href="/search/Python200%2BTips/1.htm">Python200+Tips</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Spendyourtimeonself-improvement121Requests-简化的HTTP请求处理发送GET请求发送POST请求发送PUT请求发送DELETE请求会话管理处理超时文件上传122BeautifulSoup-网页解析和抓取解析HTML和XML文档查找单个标签查找多个标签使用CSS选择器查找标签提取文本修改文档内容删除标签处理XML文档123Scrapy-强大的网络爬虫框架示例</div> </li> <li><a href="/article/1835338310210383872.htm" title="FlagEmbedding" target="_blank">FlagEmbedding</a> <span class="text-muted">吉小雨</span> <a class="tag" taget="_blank" href="/search/python%E5%BA%93/1.htm">python库</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>FlagEmbedding教程FlagEmbedding是一个用于生成文本嵌入(textembeddings)的库,适合处理自然语言处理(NLP)中的各种任务。嵌入(embeddings)是将文本表示为连续向量,能够捕捉语义上的相似性,常用于文本分类、聚类、信息检索等场景。官方文档链接:FlagEmbedding官方GitHub一、FlagEmbedding库概述1.1什么是FlagEmbeddi</div> </li> <li><a href="/article/1835328099944853504.htm" title="Playwright 自动化验证码教程" target="_blank">Playwright 自动化验证码教程</a> <span class="text-muted">吉小雨</span> <a class="tag" taget="_blank" href="/search/python%E5%BA%93/1.htm">python库</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>Playwright自动化点击验证码教程在自动化测试中,Playwright是一个流行的浏览器自动化工具,支持多种浏览器的高效操作。验证码(如图片验证码、滑动验证码等)是网页中常见的反自动化机制,常常需要特别处理。我们将介绍如何使用Playwright自动化点击验证码,并提供几种常见验证码的处理方案。官方文档链接:Playwright官方文档一、Playwright环境搭建1.1安装Playwri</div> </li> <li><a href="/article/1835326359614877696.htm" title="svg图片兼容性和用法优缺点" target="_blank">svg图片兼容性和用法优缺点</a> <span class="text-muted">独行侠_ef93</span> <div>svg图片的使用方法第一次来认认真真的研究了下svg图片,之前只是在网上见过,但都是一晃而过也没当回事,最近网站改版看到同事有用到svg格式的图片,想想自己干了几年的重构也没用过,这些细节的知识是应该好好研究研究了。暂时还没研究得完全透切,先记下目前为止所看到的吧不然又给忘了。svg可缩放矢量图形(ScalableVectorGraphics),顾名思义就是任意改变其大小也不会变形,是基于可扩展标</div> </li> <li><a href="/article/1835298036335603712.htm" title="sentinel 不显示项目_Sentinel相关问题记录" target="_blank">sentinel 不显示项目_Sentinel相关问题记录</a> <span class="text-muted">weixin_39840606</span> <a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/%E4%B8%8D%E6%98%BE%E7%A4%BA%E9%A1%B9%E7%9B%AE/1.htm">不显示项目</a> <div>SentinelFAQ整理Sentinel承接阿里巴巴近10年双十一大促流量的核心场景,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。其提供丰富的应用场景支持、完备的监控能力、易用的拓展点。Note:中文文档请见此处。热点问题1、Q:dashboard不展示监控问题如何排查?dashboard是一个单独启动的控制台,引入sentinel的应用是一个客户端。它们各自有</div> </li> <li><a href="/article/1835288964056051712.htm" title="分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)" target="_blank">分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)</a> <span class="text-muted">计算机源码社</span> <a class="tag" taget="_blank" href="/search/Python%E9%A1%B9%E7%9B%AE/1.htm">Python项目</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E9%80%89%E9%A2%98/1.htm">计算机毕业设计选题</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E6%BA%90%E7%A0%81/1.htm">计算机毕业设计源码</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/spark%E6%AF%95%E8%AE%BE/1.htm">spark毕设</a> <div>作者:计算机源码社个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!学习资料、程序开发、技术解答、文档报告如需要源码,可以扫取文章下方二维码联系咨询Java项目微信小程序项目Android项目Python项目PHP项目ASP.NET项目Node.js项目选题推荐项目实战|p</div> </li> <li><a href="/article/1835270061674295296.htm" title="word转html制作操作手册,Word文档转换为HTML帮助文档操作手册范本.pdf" target="_blank">word转html制作操作手册,Word文档转换为HTML帮助文档操作手册范本.pdf</a> <span class="text-muted">想吃草莓干</span> <a class="tag" taget="_blank" href="/search/word%E8%BD%AChtml%E5%88%B6%E4%BD%9C%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/1.htm">word转html制作操作手册</a> <div>Word文档转换为HTML帮助文档操作手册一、使用到的软件DOC2CHMDreamweaverCS3Helpandmanual4二、操作步骤1.先建立一个工作目录。如hhwork。2.将需要转换的文件复制到此工作目录下。如果是中文文件名,最好将其改为英文文件名。例:现在要将《小神探点检定修信息管理系统使用手册0.3.6.doc》转换为Html格式的帮助文档,首先将此文档复制到hhwork目录下并将</div> </li> <li><a href="/article/1835267666290503680.htm" title="HTTPS 安全最佳实践(一)之SSLTLS部署" target="_blank">HTTPS 安全最佳实践(一)之SSLTLS部署</a> <span class="text-muted">SHENHUANJIE</span> <a class="tag" taget="_blank" href="/search/HTTPS/1.htm">HTTPS</a><a class="tag" taget="_blank" href="/search/SSL/1.htm">SSL</a><a class="tag" taget="_blank" href="/search/TLS/1.htm">TLS</a> <div>SSL/TLS是一种简单易懂的技术,它很容易部署及运行。但想要部署的安全通常是不容易的。这也使系统管理员和开发者不得不去了解SSL和TLS相关的技术,掌握如何配置一个安全的web服务器或应用。无疑会耗费很大的精力去看相关的技术文档,乏味且宽泛。受理SSL数字证书客户问题,包括产品咨询、技术支持、投诉受理、建议反馈,以及购买帮助等。1证书和私钥在TLS中,所有的安全性都从服务器的密码标识开始;需要一</div> </li> <li><a href="/article/1835241190807662592.htm" title="【STM32系统】基于STM32设计的锂电池电量/电压检测报警器系统——文末完整资料下载(程序源码/电路原理图/电路PCB/设计文档/模块资料/元器件清单/实物图/答辩问题技巧/PPT模版等)" target="_blank">【STM32系统】基于STM32设计的锂电池电量/电压检测报警器系统——文末完整资料下载(程序源码/电路原理图/电路PCB/设计文档/模块资料/元器件清单/实物图/答辩问题技巧/PPT模版等)</a> <span class="text-muted">阿齐Archie</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA%E5%B5%8C%E5%85%A5%E5%BC%8F%E9%A1%B9%E7%9B%AE/1.htm">单片机嵌入式项目</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a> <div>基于STM32设计的锂电池电量/电压检测报警器系统系统视频:摘要:本设计旨在研究一个基于STM32F103C8T6微控制器的锂电池电量/电压检测报警器系统,应用于便携式电子设备电池管理。系统通过STM32的ADC模块对锂电池电压进行采集,利用LCD1602显示模块实时显示电池电压,当检测到电池电量不足或电压异常时,蜂鸣器报警模块会发出警报提醒用户。系统采用简单的硬件结构和优化的软件架构,通过对实际</div> </li> <li><a href="/article/1835237410745708544.htm" title="Linux命令行基础——软件包管理" target="_blank">Linux命令行基础——软件包管理</a> <span class="text-muted">HHwxtx</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>1.软件包管理的发展初始阶段最早的软件包管理可以追溯到Unix系统的早期版本。在那时,软件通常以源代码的形式分发,并由系统管理员手动编译和安装。这种方式的管理比较原始和繁琐,因为每次安装都需要手动解决依赖关系和编译问题。软件包的引入为了简化安装过程,软件包被引入Linux,它将软件及其所有文件和资源打包在一起的集合,通常包括可执行文件、库文件、配置文件、文档和元数据(如软件名称、版本号、依赖关系等</div> </li> <li><a href="/article/1835233629056364544.htm" title="java 技术 架构 相关文档" target="_blank">java 技术 架构 相关文档</a> <span class="text-muted">圣心</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在Java中,有许多不同的技术和架构,这里我将列举一些常见的Java技术和架构,并提供一些相关的文档资源。SpringFrameworkSpring是一个开源的Java/JavaEE全功能框架,以Apache许可证形式发布,提供了一种实现企业级应用的方法。官方文档:SpringFrameworkSpringBootSpringBoot是Spring的一个子项目,旨在简化创建生产级的Spring应用</div> </li> <li><a href="/article/1835230790942814208.htm" title="颜汝老师2.6号直播@命硬私董会" target="_blank">颜汝老师2.6号直播@命硬私董会</a> <span class="text-muted">酸梅子616</span> <div>一层:用番茄钟;一次只做一件事;做到有结果再去做另一件事专注第二层:石墨文档全屏功能;让你完全忘记时间;抖音就是让你经常偷走时间的软件专注第三层:当别人没给你设置倒计时,你要给自己设置倒计时;有意识去给自己倒计时;乔布斯假如今天是我生命中的最后一天我要如何对待这一天)人有两种状态:一种是懒洋洋状态;另一种是灰大狼专注记者思维;随时随地进入专注的状态的那个人生疑问是什么,去训练自己,去给生活做结合;</div> </li> <li><a href="/article/1835219761101893632.htm" title="系统设计DDIA之Chapter 7 Transactions 之防止丢失更新" target="_blank">系统设计DDIA之Chapter 7 Transactions 之防止丢失更新</a> <span class="text-muted">暴躁老哥在线刷题</span> <a class="tag" taget="_blank" href="/search/SystemDesign/1.htm">SystemDesign</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/1.htm">系统设计</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a><a class="tag" taget="_blank" href="/search/DDIA/1.htm">DDIA</a> <div>防止丢失更新涉及处理多个事务并发写入时发生的各种冲突类型。虽然“读已提交”和“快照隔离”等隔离级别管理与读取相关的冲突,但防止丢失更新需要额外的措施来处理写写冲突。丢失更新问题:当两个事务同时读取一个值,对其进行修改,然后将修改后的值写回时,会发生这种问题。一个修改可能会覆盖或“破坏”另一个修改,导致更新丢失。例子包括递增计数器、更新复杂文档,或多个用户同时编辑相同内容。防止丢失更新的解决方案:原</div> </li> <li><a href="/article/7.htm" title="LeetCode[位运算] - #137 Single Number II" target="_blank">LeetCode[位运算] - #137 Single Number II</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a><a class="tag" taget="_blank" href="/search/LeetCode/1.htm">LeetCode</a><a class="tag" taget="_blank" href="/search/%E9%A2%98%E8%A7%A3/1.htm">题解</a><a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a> <div>原题链接:#137 Single Number II  要求: 给定一个整型数组,其中除了一个元素之外,每个元素都出现三次。找出这个元素 注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间   难度:中等   分析: 与#136类似,都是考察位运算。不过出现两次的可以使用异或运算的特性 n XOR n = 0, n XOR 0 = n,即某一</div> </li> <li><a href="/article/134.htm" title="《JavaScript语言精粹》笔记" target="_blank">《JavaScript语言精粹》笔记</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。 1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数,所以1和1.0的值相同。 2、NaN是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。可以用函数isNaN(number)检测NaN,但是</div> </li> <li><a href="/article/261.htm" title="你应该更新的Java知识之常用程序库" target="_blank">你应该更新的Java知识之常用程序库</a> <span class="text-muted">Kai_Ge</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进。如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东西。 Guava Guava[gwɑ:və],一句话,只要你做Java项目,就应该用Guava(Github)。 guava 是 Google 出品的一套 Java 核心库,在我看来,它甚至应该</div> </li> <li><a href="/article/388.htm" title="HttpClient" target="_blank">HttpClient</a> <span class="text-muted">120153216</span> <a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a> <div>/** * 可以传对象的请求转发,对象已流形式放入HTTP中 */ public static Object doPost(Map<String,Object> parmMap,String url) { Object object = null; HttpClient hc = new HttpClient(); String fullURL </div> </li> <li><a href="/article/515.htm" title="Django model字段类型清单" target="_blank">Django model字段类型清单</a> <span class="text-muted">2002wmj</span> <a class="tag" taget="_blank" href="/search/django/1.htm">django</a> <div>Django 通过 models 实现数据库的创建、修改、删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段) BooleanField:布尔字段,管理工具里会自动将其描述为checkbox。 Cha</div> </li> <li><a href="/article/642.htm" title="在SQLSERVER中查找消耗CPU最多的SQL" target="_blank">在SQLSERVER中查找消耗CPU最多的SQL</a> <span class="text-muted">357029540</span> <a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a> <div>返回消耗CPU数目最多的10条语句 SELECT TOP 10    total_worker_time/execution_count AS avg_cpu_cost, plan_handle,    execution_count,    (SELECT SUBSTRING(text, statement_start_of</div> </li> <li><a href="/article/769.htm" title="Myeclipse项目无法部署,Undefined exploded archive location" target="_blank">Myeclipse项目无法部署,Undefined exploded archive location</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a> <div>做个备忘! 错误信息为:       Undefined exploded archive location 原因:           在工程转移过程中,导致工程的配置文件出错; 解决方法:    </div> </li> <li><a href="/article/896.htm" title="GMT时间格式转换" target="_blank">GMT时间格式转换</a> <span class="text-muted">adminjun</span> <a class="tag" taget="_blank" href="/search/GMT/1.htm">GMT</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E8%BD%AC%E6%8D%A2/1.htm">时间转换</a> <div>普通的时间转换问题我这里就不再罗嗦了,我想大家应该都会那种低级的转换问题吧,现在我向大家总结一下如何转换GMT时间格式,这种格式的转换方法网上还不是很多,所以有必要总结一下,也算给有需要的朋友一个小小的帮助啦。 1、可以使用 SimpleDateFormat SimpleDateFormat    EEE-三位星期 d-天 MMM-月 yyyy-四位年 </div> </li> <li><a href="/article/1023.htm" title="Oracle数据库新装连接串问题" target="_blank">Oracle数据库新装连接串问题</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/oracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">oracle数据库</a> <div>割接新装了数据库,客户端登陆无问题,apache/cgi-bin程序有问题,sqlnet.log日志如下: Fatal NI connect error 12170.   VERSION INFORMATION:         TNS for Linux: Version 10.2.0.4.0 - Product</div> </li> <li><a href="/article/1150.htm" title="回顾java数组复制" target="_blank">回顾java数组复制</a> <span class="text-muted">ayaoxinchao</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a> <div>在写这篇文章之前,也看了一些别人写的,基本上都是大同小异。文章是对java数组复制基础知识的回顾,算是作为学习笔记,供以后自己翻阅。首先,简单想一下这个问题:为什么要复制数组?我的个人理解:在我们在利用一个数组时,在每一次使用,我们都希望它的值是初始值。这时我们就要对数组进行复制,以达到原始数组值的安全性。java数组复制大致分为3种方式:①for循环方式 ②clone方式 ③arrayCopy方</div> </li> <li><a href="/article/1277.htm" title="java web会话监听并使用spring注入" target="_blank">java web会话监听并使用spring注入</a> <span class="text-muted">bewithme</span> <a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a> <div>        在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。        import java.util.ArrayList; import java.ut</div> </li> <li><a href="/article/1404.htm" title="NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)" target="_blank">NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a> <div>一 .Redis常用命令         Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。         a.键值相关命令         b.服务器相关命令 1.键值相关命令       &</div> </li> <li><a href="/article/1531.htm" title="java枚举序列化问题" target="_blank">java枚举序列化问题</a> <span class="text-muted">bingyingao</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE/1.htm">枚举</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97%E5%8C%96/1.htm">序列化</a> <div>对象在网络中传输离不开序列化和反序列化。而如果序列化的对象中有枚举值就要特别注意一些发布兼容问题: 1.加一个枚举值 新机器代码读分布式缓存中老对象,没有问题,不会抛异常。 老机器代码读分布式缓存中新对像,反序列化会中断,所以在所有机器发布完成之前要避免出现新对象,或者提前让老机器拥有新增枚举的jar。 2.删一个枚举值 新机器代码读分布式缓存中老对象,反序列</div> </li> <li><a href="/article/1658.htm" title="【Spark七十八】Spark Kyro序列化" target="_blank">【Spark七十八】Spark Kyro序列化</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a> <div>当使用SparkContext的saveAsObjectFile方法将对象序列化到文件,以及通过objectFile方法将对象从文件反序列出来的时候,Spark默认使用Java的序列化以及反序列化机制,通常情况下,这种序列化机制是很低效的,Spark支持使用Kyro作为对象的序列化和反序列化机制,序列化的速度比java更快,但是使用Kyro时要注意,Kyro目前还是有些bug。 Spark</div> </li> <li><a href="/article/1785.htm" title="Hybridizing OO and Functional Design" target="_blank">Hybridizing OO and Functional Design</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a><a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a> <div>  推荐博文: Tell Above, and Ask Below - Hybridizing OO and Functional Design 文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,</div> </li> <li><a href="/article/1912.htm" title="Java-Collections Framework学习与总结-HashMap" target="_blank">Java-Collections Framework学习与总结-HashMap</a> <span class="text-muted">BrokenDreams</span> <a class="tag" taget="_blank" href="/search/Collections/1.htm">Collections</a> <div>        开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。  &nb</div> </li> <li><a href="/article/2039.htm" title="读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility" target="_blank">读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ /** * 业务逻辑:项目经理只能处理500以下的费用申请,部门经理是1000,总经理不设限。简单起见,只同意“Tom”的申请 * bylijinnan */ abstract class Handler { /* </div> </li> <li><a href="/article/2166.htm" title="Android中启动外部程序" target="_blank">Android中启动外部程序</a> <span class="text-muted">cherishLC</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>1、启动外部程序 引用自: http://blog.csdn.net/linxcool/article/details/7692374 //方法一 Intent intent=new Intent(); //包名 包名+类名(全路径) intent.setClassName("com.linxcool", "com.linxcool.PlaneActi</div> </li> <li><a href="/article/2293.htm" title="summary_keep_rate" target="_blank">summary_keep_rate</a> <span class="text-muted">coollyj</span> <a class="tag" taget="_blank" href="/search/SUM/1.htm">SUM</a> <div> BEGIN /*DECLARE minDate varchar(20) ; DECLARE maxDate varchar(20) ;*/ DECLARE stkDate varchar(20) ; DECLARE done int default -1; /* 游标中 注册服务器地址 */ DE</div> </li> <li><a href="/article/2420.htm" title="hadoop hdfs 添加数据目录出错" target="_blank">hadoop hdfs 添加数据目录出错</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hdfs/1.htm">hdfs</a><a class="tag" taget="_blank" href="/search/%E6%89%A9%E5%AE%B9/1.htm">扩容</a> <div>由于原来配置的hadoop data目录快要用满了,故准备修改配置文件增加数据目录,以便扩容,但由于疏忽,把core-site.xml, hdfs-site.xml配置文件dfs.datanode.data.dir 配置项增加了配置目录,但未创建实际目录,重启datanode服务时,报如下错误: 2014-11-18 08:51:39,128 WARN org.apache.hadoop.h</div> </li> <li><a href="/article/2547.htm" title="grep 目录级联查找" target="_blank">grep 目录级联查找</a> <span class="text-muted">dongwei_6688</span> <a class="tag" taget="_blank" href="/search/grep/1.htm">grep</a> <div>       在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数: grep -n -r "GET" .   上面的命令将会找出当前目录“.”及当前目录中所有下级目录</div> </li> <li><a href="/article/2674.htm" title="yii 修改模块使用的布局文件" target="_blank">yii 修改模块使用的布局文件</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a><a class="tag" taget="_blank" href="/search/layouts/1.htm">layouts</a> <div>方法一:yii模块默认使用系统当前的主题布局文件,如果在主配置文件中配置了主题比如: 'theme'=>'mythm', 那么yii的模块就使用 protected/themes/mythm/views/layouts 下的布局文件; 如果未配置主题,那么 yii的模块就使用  protected/views/layouts 下的布局文件, 总之默认不是使用自身目录 pr</div> </li> <li><a href="/article/2801.htm" title="设计模式之单例模式" target="_blank">设计模式之单例模式</a> <span class="text-muted">come_for_dream</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a><a class="tag" taget="_blank" href="/search/%E6%87%92%E6%B1%89%E5%BC%8F%E9%A5%BF%E6%B1%89%E5%BC%8F/1.htm">懒汉式饿汉式</a><a class="tag" taget="_blank" href="/search/%E5%8F%8C%E9%87%8D%E6%A3%80%E9%AA%8C%E9%94%81%E5%A4%B1%E8%B4%A5/1.htm">双重检验锁失败</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E5%BA%8F%E5%86%99%E5%85%A5/1.htm">无序写入</a> <div>                今天该来的面试还没来,这个店估计不会来电话了,安静下来写写博客也不错,没事翻了翻小易哥的博客甚至与大牛们之间的差距,基础知识不扎实建起来的楼再高也只能是危楼罢了,陈下心回归基础把以前学过的东西总结一下。   *********************************</div> </li> <li><a href="/article/2928.htm" title="8、数组" target="_blank">8、数组</a> <span class="text-muted">豆豆咖啡</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">一维数组</a> <div>  一、概念       数组是同一种类型数据的集合。其实数组就是一个容器。   二、好处       可以自动给数组中的元素从0开始编号,方便操作这些元素   三、格式   //一维数组 1,元素类型[] 变量名 = new 元素类型[元素的个数] int[] arr =</div> </li> <li><a href="/article/3055.htm" title="Decode Ways" target="_blank">Decode Ways</a> <span class="text-muted">hcx2013</span> <a class="tag" taget="_blank" href="/search/decode/1.htm">decode</a> <div>A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits, det</div> </li> <li><a href="/article/3182.htm" title="Spring4.1新特性——异步调度和事件机制的异常处理" target="_blank">Spring4.1新特性——异步调度和事件机制的异常处理</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring+4.1/1.htm">spring 4.1</a> <div>目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异常处理 Spring4.1新特性——数据库集成测试脚本初始化 Spring4.1新特性——Spring MVC增强 Spring4.1新特性——页面自动化测试框架Spring MVC T</div> </li> <li><a href="/article/3309.htm" title="squid3(高命中率)缓存服务器配置" target="_blank">squid3(高命中率)缓存服务器配置</a> <span class="text-muted">liyonghui160com</span> <div>    系统:centos 5.x   需要的软件:squid-3.0.STABLE25.tar.gz 1.下载squid wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz tar zxf squid-3.0.STABLE25.tar.gz &&</div> </li> <li><a href="/article/3436.htm" title="避免Java应用中NullPointerException的技巧和最佳实践" target="_blank">避免Java应用中NullPointerException的技巧和最佳实践</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。   总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常 Object unk</div> </li> <li><a href="/article/3563.htm" title="如何在Swift语言中创建http请求" target="_blank">如何在Swift语言中创建http请求</a> <span class="text-muted">shoothao</span> <a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a> <div> 概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。 如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。 在这里,我将作出一些建议来回答上述问题。常见的</div> </li> <li><a href="/article/3690.htm" title="Spring事务的传播方式" target="_blank">Spring事务的传播方式</a> <span class="text-muted">uule</span> <a class="tag" taget="_blank" href="/search/spring%E4%BA%8B%E5%8A%A1/1.htm">spring事务</a> <div>传播方式:        新建事务       required       required_new   - 挂起当前         非事务方式运行       supports   &nbs</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>