YouTube允许日本版权所有人通过盗版创收

新浪科技讯 北京时间11月26日消息,据国外媒体报道,YouTube日前与一个由日本23家最大的电视广播商和版权机构组成的联盟签署了一项许可协议,并表示用户上传的版权内容并非是一种威胁。两年前,该联盟曾谴责YouTube放任用户上传盗版内容。

YouTube表示,部署的一项新技术能够识别用户上传内容的版权所有人,为内容合作伙伴带来收入。YouTube负责内容合作业务的副总裁大卫·埃文(David Eun)在东京举行的一次新闻发布会上阐述了YouTube的商业计划,称将重点解决创收问题。

YouTube利用视频内容创收计划的核心是Content ID,该系统首先扫描用户上传的视频内容,然后与由版权人提供的参考视频数据库进行比对。埃文说,“这一技术将继续得到改进,但它的表现已经令我们相当吃惊了。”

在发现盗版内容后,内容提供商有三种选择:封杀盗版内容;跟踪盗版内容,了解哪些用户在何时观看了盗版内容;在盗版内容中插播广告获得收入。埃文表示,目前已经有约300家合作伙伴使用了Content ID,在约90%的情况下他们会选择插播广告。

埃文称,“在被观看次数最多的视频内容中,被合作伙伴声称拥有版权的用户上传内容多于合作伙伴自己上传的内容。对于一些合作伙伴而言,内容的被观看次数因此而增长了50倍,不但会提高广告收入,还使他们能够更了解用户喜欢哪些类型的内容。”

YouTube还在试验视频内置广告。埃文表示,试验表明,按点进率计算,视频内置广告的有效性比标准显示广告高8-10倍。

过去两年中,YouTube在日本的地位得到了巩固。日本已经成为YouTube最大的海外市场。

Discuz!源代码分析[模板使用include template(discuz)]:./include/template.func.php

本帖不仅仅是分析文件,还把Discuz中模板解析这一原理分析了一下。转自www.discuz.net 作者:郭鑫

我记得我刚开始学PHP的时候,对模板解析实在是觉得很奇怪,不知道这个原理怎么实现的,后来看书看多了也明白有一个著名的Smarty在那,曾经也用过一段,不过感觉不是很好,就开始分析Discuz的模板技术是怎么实现的了,然后我把这个模板解析的代码分离出来了,觉得很好用,用了一段时间, Discuz的模板解析是用正则表达式替换一些模板中的规定的语言标记,然后呢,写到forumdata/templates中,再用include引用到index, forumdisplay等等中,和smarty的原理基本上相同,只是功能没有smarty那么多,smarty内建了一个cache来着…连个 User Guide都几百页…
  呵呵,不过现在基本上两个都没用过,正则表达式好是好用,不过正则的效率不是很高,以前看PHP技术文档的时候说能不用正则就尽量不要用,那东西烦着,现在做什么项目基本上用的是框架,MVC的模式,View中的代码一般不用模板解析出来,混杂php代码在里面,也觉得不错,OOP的开发效率比较高,很多地方重用代码是很开心的~!

  Discuz的模板解析要分析出来只要用到两个文件:./include/global.func.php和. /include/template.func.php,global只要一个函数就够了,template要全部的文件下面我就分开讲一下,会比较详细,大家耐心看:

Section One–./include/global.func.php—->template function

这个函数一共有三个传入参数:

$file 表示模板名
$templateid 表示模板id
$tpldir 表示模板目录

这个是把$tplrefresh作为一个全局变量,tplrefresh表示是不是刷新模板

$tpldir和$templateid赋值,如果没有传进来就用常量TPLDIR和TEMPLATEID给它们值

这里是把$tplfile(表示的是模板文件)和$objfile(表示的是要编译成的文件)赋值

防止TEMPLATEID不等于1且$templateid不等于1,而且模板文件不存在导致空白问题。
这里也可以算一个迭代,也可以不算,就是把1作为第二个参数再调用函数本身。

很巧妙的一段,Discuz的模板缓存就体现在这里,如果你没打开模板刷新的话(config.inc.php->$tplrefresh=0),这里就直接返回一个$objfile了,而这个文件是你第一次建论坛的时候就写入的,如果你不改模板的话,关了是能提高相当一部分效率的!反之,如果你打开了模板刷新的话就接着判断是不是模板文件的建立时间大于 forumdata/templates下的文件,是的话就引用./include/template.func.php写入模板文件到 forumdata/templates中,否则的话还是直接返回一个已经编译好的模板文件。
关于template.func.php文件中函数的分析在下面:

如何快速的呈现我们的网页

一、我们需达解决的麻烦

  • 减少HTTP请求数. 减少HTTP请求数有什么好处
    • 降低服务器跟客户端的建立和消除HTTP请求和响应Header的开销
    • 减少服务器为HTTP连接的进程和线程的开销,如果可能,还会包括GZIP压缩的CPU开销.
  • 减小被请求文件大小, 减少请求数据占用的网络带宽.
  • 让用户更快的看到想要的结果.
  • 提高客户端渲染速度.
  • 让浏览器同时能请求更多的数据.
  • 提高服务器相应速度.
  • 通过版本化控制客户端Cache.

二、如何解决我们的麻烦

A.如何减少HTTP请求数

  1. 合并JS文件跟CSS文件。
  2. 合并框架图片以及相对变动较少的图片成一张,通过CSS背景切割来完成渲染,比如:加速图片显示
  3. 合理使用本地Cache来缓存JS/CSS/IMAGE。
  4. 合理使用UserData缓存JS文件,对于FF用户可以单独请求服务器,这样能解决80%用户的问题.代码可以蓉儿(meizz)的js framework1(标注1)。
  5. 把JS跟CSS合并成一个文件

B.减小被请求文件大小,减少请求数据占用的网络带宽

  1. 压缩JS体积:删除JS中空白换行,注释,混淆把长变量换成短变量;
  2. 压缩CSS体积:删除CSS注释、写法尽量用简写;
  3. 使用(X)HTML+CSS方式搭建网站结构,提高CSS重用性,来减少(X)HTML文件大小;
  4. 使用服务器端GZIP压缩JS/ CSS文件,缩小传输文件大小。附注:Apache1跟Apache2的GZIP的效率跟方式不一样的,根据需要自行选择。

    嗷嗷补充说明:压缩、合并JS和CSS都由程序处理。而不是自己手动去缩删,不然不利于后期维护。

C.让用户更快的看到想要的结果

用户对于一个站点的白页的忍受时间根据统计是8-12秒。白页的产生可能由于各种原因引起,我们能做的就是怎么让用户能变的稍微能等待更久。

  1. 方案1:多做一个引导页,让用户体会其中的变化
    案例:mail.aol.com中的loading引导页
  2. 方案2:优先载入页面结构以及结构图片,后一步载入当前页面数据,再后一步载入Iframe,Flash等数据.让用户尽早的看到被打开页面的希望.

D.提高客户端渲染速度

这个问题就比较泛泛了,影响客户端的渲染速度有多方面的,主要目的都是提高程序方面的效率.

  1. 对于大索引的结构,尽可能的少用索引访问,能用访问兄弟节点的方式尽可能用访问兄弟节点的方式.
  2. 字符串拼接尽可能用数组方式
  3. 大规模添加节点数据,请不要使用appendChild方式,尽量使用类似innerHTML的insertAdjacentHTML方式,FF下需修正(标注1)

E.让浏览器同时能请求更多的数据.

浏览器默认只是支持单域名同时有两个HTTP请求,使用多域名将能把请求数提高,在网络条件优良的情况下,能更快的下载数据,呈现结果.

F.提高服务器相应速度

对于需快速响应的文件,把其放入快速响应的服务器,应该是不错的方案,优化方案请系统储备组提供.

G.通过版本化控制客户端Cache

通常js/css这类文件改动比较频繁,但是为了加载速度变快,我们有可能需要设定这类文件的过期时间为几天后,这样我们碰到的问题就是,如何及时更新这些在cache的文件?
通过一个简单的配置,通过修改JS的版本来及时告诉浏览器,这些文件必须重新请求了,不要继续使用浏览器cache中的数据. 方案有好几个:

  1. 手动改这些js的文件名
  2. 手动改这些js的路径
  3. 通过URL Rewrite方式来改重定位js路径
  4. 通过一个在高响应服务器上的一个js配置告知页面,这个页面该链接哪些JS文件
  5. 大版本不变,小版本不断追加,等一定时间后,统一更新,高效利用cache

标注

  1. meizz的js framework还没出正式版,有兴趣在CSDN的页面翻一下
  2. Firefox修正方式

转载于:http://www.blueidea.com/tech/site/2007/4822.asp

[转]关于大家问的uc开发手册不能同步登陆问题

最近在做一个整合 UCenter 的项目,下载了一份 uc开发手册,测试结果是这样的:
通过uch 登陆 可以同步登陆到论坛,但是不能登陆到 ucexample_1.php 和 2 这个开发手册自带的例子中。
但是通过ucexample_1.php 和 2 的例子登陆是可以登陆到 uch 和 论坛的
所有都是在配置正确的前提下进行,在 uc管理中的 应用管理 通信是要成功的。

那么问题是如何出现的呢?
看一下 api/uc.php
99-110行

  1. //同步登录 API 接口
  2. include ‘./include/db_mysql.class.php';
  3. $db = new dbstuff;
  4. $db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
  5. unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
  6. $uid = intval($get[‘uid’]);
  7. $query = $db->query(“SELECT uid, username FROM {$tablepre}members WHERE uid=’$uid'”);
  8. if($member = $db->fetch_array($query)) {
  9. header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
  10. dsetcookie(‘Example_auth’, authcode($member[‘uid’].”\t”.$member[‘username’], ‘ENCODE’), 86400 * 365);
  11. }

复制代码

你会发现是一个读取数据库的操作,读取到才能设置咱们自己应用的 cookies 的
那么样例中似乎说的是要连接到自己的数据库中,可想如果咱们自己的数据库没有会员数据那么就登陆不成功了,所以解决办法就是读取uc自己的数据库!
在 app 的 config.inc.php 中
21-28行,不要看提示说是设置自己的,咱们直接设置 uc 的数据库

  1. //ucexample_2.php 用到的应用程序数据库连接参数
  2. $dbhost = ‘localhost';                        // 数据库服务器
  3. $dbuser = ‘root';                        // 数据库用户
  4. $dbpw = ”;                                // 数据库密码
  5. $dbname = ‘uc';                        // 数据库名
  6. $pconnect = 0;                                // 数据库持久连接 0=关闭, 1=打开
  7. $tablepre = ‘uc_';                   // 表名前缀, 同一数据库安装多个论坛请修改此处
  8. $dbcharset = ‘gbk';                        // MySQL 字符集, 可选 ‘gbk’, ‘big5′, ‘utf8′, ‘latin1′, 留空为按照论坛字符集设定

然后你在测试一下,通过论坛 uch登陆 也可以直接同步登陆到 示例的应用中了!

转自:http://www.discuz.net/viewthread.php?tid=1043330&extra=page%3D1&frombbs=1

CHKDSK(磁盘检测)命令的运用

CHKDSK命令可检查磁盘状态并显示状态报告,还能修正磁盘错误。

  状态报告显示MS-DOS文件系统中的逻辑错误,该文件系统由文件分配表(FAT)和目录组成(CHKDSK不验证文件中的信息能否准确读出)。如果磁盘有错误,CHKDSK便会给出一条警告信息。所以,应不时地用CHKDSK来检查一下磁盘有无错误,以保证系统的正常运行。

  一、CHKDSK命令的语法

  CHKDSK drive:[[path]filename][/F][/V]

  若要显示当前驱动器的磁盘状态,可用命令:

  CHKDSK

  二、CHKDSK命令的参数解释

  (1)drive

  指定要用CHKDSK检查的磁盘所在的驱动器。

  (2)[path]filename

  指定要用CHKDSK进行碎片检查的一个或一组文件的路径及名称,可用通配符(*或?)指定多上文件。

  三、CHKDSK命令的开关项

  (1)/F

  修正磁盘错误。需要注意的是从其它应用程序(如Windows等)运行CHKDSK时不要选此项。

  (2)/V

  磁盘检查时,显示每个目录下的文件。

  四、帮助信息的获取

  如果不知道CHKDSK命令的用法也没关系,在DOS下随时打入CHKDSK/?便可了解其用法。

  五、关于CHKDSK命令的注释

  (1)状态报告的形式

  MS-DOS按类似下列的形式显示CHKDSK的状态报告:

  Volume MS-DOS_6 created 07-16-1996 10:40a

  Volume Serial Number is 2111-59F0

  629,424,128 bytes total disk space

  638,976 bytes in 15 hidden files

  1,146,880 bytes in 70 directories

  120,766,464 bytes in 1,802 user files

  506,871,808 bytes available on disk

  (2)修正磁盘错误

  在修正磁盘错误时,最好使用ScanDisk程序。详细信息可以参阅(SCANDISK)命令。用CHKDSK/F命令修正磁盘错误的显示信息如下:

  10 lost allocation units found 3 chains

  convert lost chains to files?

  若按下Y,MS-DOS把每个丢失的链在根目录中以FILEnnnn .CHK形式的文件名存放文件,nnnn是从0000开始的数字。CHKDSK检查结束后,可以检查一下这些文件是否含有所需要的数据,如果有就可以对其进行编辑后使用,否则便可将其全部删除,以免占用磁盘空间。若选N,MS-DOS只修正磁盘,但不保存丢失的分配单元的内容。

  如果不用/F开关项,CHKDSK将出示信息提醒用户是否文件需要修正恢复,但不进行实际的错误修正工作。

  (3)ERRORLEVER参数

  若CHKDSK没有找到任何错误,则返回到ERRORLEVER的值为0。如果找到了一个或多个错误,返回时ERRORLEVER的值为255。

  六、使用CHKDSK命令的注意事项

  (1)系统存在打开的文件时

  当有文件打开时请不要使用CHKDSK。因为CHKDSK是假定磁盘文件处于关闭状态而设计的。当有文件打开时,相应的MS-DOS将会修改文件分配表和目录结构。这种改变并不一定立即进行,文件分配表和目录结构的改变发生在不同时刻。因此如果磁盘上文件打开时运行CHKDSK,就会把目录结构和文件分配表的不一致解释为出错,从而导致数据丢失或文件系统的破坏。因此,在运行其它程序,如Microsoft Windows时,千万不要运行CHKDSK。

  (2)CHKDSK不能用于分配的驱动器和网络。

  CHKDSK不能用于由SUBST命令形成的驱动器工作,也不能用于网络驱动器上的磁盘检查。

  (3)物理磁盘错误

  CHKDSK命令只能找到文件系统中的逻辑错误,而不能查找物理磁盘错误。要查找物理磁盘错误,请使用SCANDISK程序。

  (4)坏磁盘扇区

  CHKDSK报告中将坏扇区标记上“bad”,SCANDISK和其它物理磁盘错误修正程序也将坏扇区标记为“bad”,因此坏扇区不会造成危害。

  (5)交叉链接的文件

  如果有两个文件或目录共用同一磁盘空间的记录,CHKDSK会报告有交叉链接文件。如果CHKDSK发现有交叉链接文件存在,会显示类似如下信息:

   is cross linked on allocation unit

  CHKDSK不会修补交叉链接文件,即使指定了/F项。要修复交叉链接文件,需要运行SCANDISK程序,或者进行手工修复,然后复制到指定的文件中并删除原文件。

  七、应用实例

  (1)将CHKDSK的状态报告存入文件

  可将CHKDSK状态报告重定向输出到一文件中保存,但注意重定向CHKDSK输出到文件时,不要使用/F开关项。例如:将CHKDSK检查的信息输出到CHK.LIS文件中,其命令为:

  C:\DOS>CHKDSK A:>CHK.LIS。

  (2)若检查C盘存储多少数据,还有多少剩余空间并修正磁盘错误,可输入如下命令:

  CHKDSK C:

  当遇到错误时,CHKDSK会暂停并提示信息。

  (3)查找文件

  利用CHKDSK与FIND命令结合管道功能实现在全盘的文件查找,这一命令格式不仅可以列出所查找文件的所在目录,而且还可以列出各目录中的同名文件,连隐含文件也不例外。值得注意的是使用本命令之前,应先用CHKDSK/F参数修正磁盘错误。例如在C盘上查找README文件,其命令格式如下:

  C:>CHKDSK/VIFIND “README”

隐藏IE横向滚动条

在以前的HTML标准下,要隐藏横向滚动条,只需要在CSS里加上
Body
{
overflow-x:hidden;
}
但是在现在的标准下”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”下面,上面的代码不产生任何效果,因为现在不是以Body作为容器,而是html标签,所以
加入:
HTML
{
overflow-x:hidden;
}
但是这样做了以后,在IE7下,鼠标滚轮上下滚动不起作用了,IE6下却是正常的。多加上一行代码就解决问题了
HTML
{
overflow-x:hidden;
overflow-y:auto;
}

全面解决Generic host process for win32 services遇到问题需要关闭

解决WINXP系统开机后弹出Generic host process for win32 services 遇到问题需要关闭!
出现上面这个错误一般有三种情况。
1.就是病毒。开机后会提示Generic Host Process for Win32 Services 遇到问题需要
关闭”“Remote Rrocedure Call (RPC)服务意外终止,然后就自动重起电脑。一般该病毒会在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run 下建立msblast.exe键值,还会在c:\windows\system32目录下会放置一个msblast.exe的木马程,解决方案如下:
RPC漏洞
详细描述:
最近发现部分RPC在使用TCP/IP协议处理信息交换时不正确的处理畸形的消息导致存在一个安全漏洞。该漏洞影响使用RPC的DCOM接口,这个接口用来处理由客户端机器发送给服务器的DCOM对象激活请求(如UNC路径)。如果攻击者成功利用了该漏洞将获得本地系统权限,他将可以在系统上运行任意命令,如安装程序、查看或更改、删除数据或者是建立系统管理员权限的帐户等.
已发现的一个攻击现象:
攻击者在用户注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Run 下建立一个叫“msupdate”(估计有变化)的键,键值一般为msblast.exeC:\windows\system32目录下会放置一个 msblast.exe的木马程序.
另外受攻击者会出现“Generic Host Process for Win32 Services 遇到问题需要关闭”“Remote Rrocedure Call (RPC)服务意外终止,Windows必须立即重新启动”等错误信息而重启。
建议到http://www.microsoft.com/security/security_bulletins/ms03-026.asp下载相应补丁。如果已受攻击,建议先拔掉网线,在任务管理器中结束msblast.exe进程,清除注册表中的相应条目,删除system32下的木马程序,最后打补丁。

第二种情况是排除病毒后,还出现这样的问题,一般都是IE组件在注册表中注册信息被破坏,可以按下面的方法去解决该问题:
1。 在”开始”菜单中打开”运行”窗口,在其中输入”regsvr32 actxprxy.dll”,然后”确定”,接着会出现一个信息对话 框”DllRegisterServer in actxprxy.dll succeeded”,再次点击”确定”。
   2 再次打开”运行”窗口,输入”regsvr32 shdocvw.dll
   3 再次打开”运行”窗口,输入”regsvr32 oleaut32.dll
   4 再次打开”运行”窗口,输入”regsvr32 actxprxy.dll
   5 再次打开”运行”窗口,输入”regsvr32 mshtml.dll
   6 再次打开”运行”窗口,输入”regsvr32 msjava.dll
   7 再次打开”运行”窗口,输入”regsvr32 browseui.dll
   8 再次打开”运行”窗口,输入”regsvr32 urlmon.dll
如果排除病毒问题后,做完上面的几个IE组件注册一般问题即可得到解决。

3.如果电脑有打印机,还可能是因为打印机驱动安装错误,也会造成这个错误。解决方法如下:
重装打印机驱动程序。
一般情况下做到上面三步后,该问题即可得到全面解决。

揭开SVCHOST.exe进程之谜

svchost.exe是nt核心系统的非常重要的进程,对于2000、xp来说,不可或缺。很多病毒、木马也会调用它。所以,深入了解这个程序,是玩电脑的必修课之一。

  大家对windows操作系统一定不陌生,但你是否注意到系统中“svchost.exe”这个文件呢?细心的朋友会发现windows中存在多个 “svchost”进程(通过“ctrl+alt+del”键打开任务管理器,这里的“进程”标签中就可看到了),为什么会这样呢?下面就来揭开它神秘的面纱。

发现

  在基于nt内核的windows操作系统家族中,不同版本的windows系统,存在不同数量的“svchost”进程,用户使用“任务管理器 ”可查看其进程数目。一般来说,win2000有两个svchost进程,winxp中则有四个或四个以上的svchost进程(以后看到系统中有多个这种进程,千万别立即判定系统有病毒了哟),而win2003 server中则更多。这些svchost进程提供很多系统服务,如:rpcss服务(remote procedure call)、dmserver服务(logical disk manager)、dhcp服务(dhcp client)等。

  如果要了解每个svchost进程到底提供了多少系统服务,可以在win2000的命令提示符窗口中输入“tlist -s”命令来查看,该命令是win2000 support tools提供的。在winxp则使用“tasklist /svc”命令。

svchost中可以包含多个服务

深入

  windows系统进程分为独立进程和共享进程两种,“svchost.exe”文件存在于“%systemroot% system32”目录下,它属于共享进程。随着windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共享方式,交由 svchost.exe进程来启动。但svchost进程只作为服务宿主,并不能实现任何服务功能,即它只能提供条件让其他服务在这里被启动,而它自己却不能给用户提供任何服务。那这些服务是如何实现的呢?

  原来这些系统服务是以动态链接库(dll)形式实现的,它们把可执行程序指向 svchost,由svchost调用相应服务的动态链接库来启动服务。那svchost又怎么知道某个系统服务该调用哪个动态链接库呢?这是通过系统服务在注册表中设置的参数来实现。下面就以rpcss(remote procedure call)服务为例,进行讲解。

  从启动参数中可见服务是靠svchost来启动的。

实例

  以windows xp为例,点击“开始”/“运行”,输入“services.msc”命令,弹出服务对话框,然后打开“remote procedure call”属性对话框,可以看到rpcss服务的可执行文件的路径为“c:\windows\system32\svchost -k rpcss”,这说明rpcss服务是依靠svchost调用“rpcss”参数来实现的,而参数的内容则是存放在系统注册表中的。

  在运行对话框中输入“regedit.exe”后回车,打开注册表编辑器,找到[hkey_local_machine systemcurrentcontrolsetservicesrpcss]项,找到类型为“reg_expand_sz”的键“magepath”,其键值为“%systemroot%system32svchost -k rpcss”(这就是在服务窗口中看到的服务启动命令),另外在“parameters”子项中有个名为“servicedll”的键,其值为“% systemroot%system32rpcss.dll”,其中“rpcss.dll”就是rpcss服务要使用的动态链接库文件。这样 svchost进程通过读取“rpcss”服务注册表信息,就能启动该服务了。

解惑

  因为svchost进程启动各种服务,所以病毒、木马也想尽办法来利用它,企图利用它的特性来迷惑用户,达到感染、入侵、破坏的目的(如冲击波变种病毒“w32.welchia.worm”)。但windows系统存在多个svchost进程是很正常的,在受感染的机器中到底哪个是病毒进程呢?这里仅举一例来说明。

  假设windows xp系统被“w32.welchia.worm”感染了。正常的svchost文件存在于“c:\windows\system32”目录下,如果发现该文件出现在其他目录下就要小心了。“w32.welchia.worm”病毒存在于“c:\windows\system32wins”目录中,因此使用进程管理器查看svchost进程的执行文件路径就很容易发现系统是否感染了病毒。windows系统自带的任务管理器不能够查看进程的路径,可以使用第三方进程管理软件,如“windows优化大师”进程管理器,通过这些工具就可很容易地查看到所有的svchost进程的执行文件路径,一旦发现其执行路径为不平常的位置就应该马上进行检测和处理。

  由于篇幅的关系,不能对svchost全部功能进行详细介绍,这是一个windows中的一个特殊进程,有兴趣的可参考有关技术资料进一步去了解它。

XSLT format-number() 函数

定义和用法

format-number() 函数用于把数字转换为字符串。
语法

string format-number(number,format,[decimalformat])

参数
参数 描述
number 必需。规定要格式化的数字。
format 必需。规定格式化模式。这是用在格式化模式中的字符:

* # (表示数字。例如:####)
* 0 (表示“.”字符前面和后面的零。例如:0000.00)
* . (小数点的位置。例如:###.##)
* , (千的组分隔符。例如:###,###.##)
* % (把数字显示为百分比。例如:##%)
* ; (模式分隔符。第一个模式用于正数,第二个模式用于负数。)

decimalformat 可选。十进制格式名称。

例子

数学运算和XSLT

  XSLT对XPath的数学性能的完全支持使人们可以做所有基本类型的算法或者更多!让我们看一下一个通过使用下面文件的值来示范这些性能的样式表:

  样式表的A到N每行均进行着(或者试图进行)一个不同的计算。这些计算使用上面文件中给出的数字和其他一些或者是样式表中固定的代码或者是从函数中返回的数值得到的值。

在我们讨论每一行具体做什么之前,让我们先看一下将样式表应用到数字文件中的结果。

A. 4 + 3.2 = 7.2
B. 3.2 – 4 = -0.8
C. 4 * 3.2 = 12.8
D. 11/3.2 = 3.4375
E. 4 + 3.2 * 11 = 39.2
F. (4 + 3.2) * 11 = 79.2
G. 11 mod 4 = 3
H. 4 + 3.2 + 11 = 18.2
I. floor(3.2) = 3
J. ceiling(3.2) = 4
K. round(3.2) = 3
L. 11 + count(*) = 14
M. 3.2 + string-length(“3.2″) =
6.2
N. 11 + “hello” = NaN

  这个样式表对源树中的numbers元素具有一个单一的模板规则。这个模板有一系列的 xsl:value-of 指令,它们用来选择属性使用numbers元素的x、y和z子元素的数值去进行各种不同的数学计算。类似的这些数学公式可以使用XPath的全部功能来表示哪些元素或属性具有他们需要的数字;但是,这个样式表更加注重于说明与使用奇特的XPath表达式从一个文件的余部找回元素和属性相比它可用的数学运算的范围。
  模板的行A将x的值(4)加到y的值(3.2)上并将他们的和7.2放到结果树中。这是非常简单的、直观的,并显示了并不需要限制在样式表数学中为整数。
  行B从3.2中减掉了4得到结果为-0.8。负数并没有给XSLT处理器带来任何的困难。
  警告: 对某些XSLT处理器,十进制数字的使用可能引入一个微小的误差。例如,这个例子中的”3.2 – 4″在有些处理器中得到的结果为”-.7999999999999998″。 .0000000000000002的误差很小,但从根本上说明数学并不是XSLT的强项。
  行C用4乘3.2,使用星号作为乘法运算符,其结果为12.8。
  行D用3.2除z元素(11),说明了一个XSLT处理器执行浮点除法运算的能力。尽管大多数的编程语言在传统上使  用斜线字符(/)表示除法运算符,但是Xpath已经将斜线字符用来分段Xpath位置路径(例如, wine/vintage 表示了vintage 元素为 wine 元素的子元素)。因此,Xpath和XSLT用字符”div” 表示除法。
  行E和F显示了圆括号与在正常的数学符号中具有同样的操作优先权:不使用圆括号,先乘后加,所以4 + 3.2 * 11 = 4 + 35.2。对”4+3.2″使用圆括号后,先进行加法运算,所以(4 + 3.2) * 11 = 7.2 * 11。
  行G示范了mod 运算符,它得到了两数相除的余数。例中为11 mod 4 结果为3,因为11除以4得2余3。这个运算符主要用来检查一个数是否能被另一个数均分;即检查大数mod小数是否等于0。
  行H示范了sum() 函数。用节点列表作为参数,它加和了列表中所有节点的数值。在本例中星号的意思是”范围节点内的所有子节点”–即numbers元素的x, y和z 子元素。
  行I和J示范了floor() 和ceiling() 函数。如果它们传入的参数为整数,它们即返回该整数。如果传入floor() 一个非整数,将返回一个小于该数的最大整数。本例中为floor(3.2)结果为3。ceiling函数将返回大于该数(非整数)的最小整数;例中 ceiling(3.2)结果为4。
  行K的round()函数把一个非整数舍入为一个最接近的整数。 当传入参数为3.2时,返回值为3;传入3.5或3.6时,它的返回值将变为4。
  行L具体表现了另一个Xpath函数:count(),它将返回作为参数传给它的节点集的个数。Xpath提供几个函数,当数学上不明确时,返回数值并可以用于各种计算:count(), last(), position()和string-length()。行M示范了string-length(),它将返回该字符串的长度。
  行N显示了当试图对一些不是数字的东西执行数学运算时得到的结果:当11加上字符串”hello”时,得到的结果为字符串”NaN”,即”Not a Number.”的缩写。当你把一个数字作为一个元素的内容或者是属性值,然后用它来进行计算,将不能保证它真正的是一个数字,所以XSLT明确定义了不能实行的情况的状态,使之更加容易的检测和处理你的代码。
  XSLT是用来处理文本,而不是数字;但是你可以用作为XSLT一部分提供的数学运算符来构建和执行更多复杂的计算。例如,下面的样式表,它可以接受任何文件作为输入,计算 pi的值。其结果的精度依赖于迭代变量的值。

  循环通过利用一个递归的命名模板(named template)来实现。根据迭代设置显示,该样式表得到的结果为:
3.1415676535897985
  经过多次迭代,结果仅仅精确到小数点后的第四位数字。当然如果你想认真地计算PI的值,有更多合适的编程语言。但是知道了在必要的时候可以使用XSLT来做一些相对复杂的数学运算还是很不错的。

补充一个sum函数的用法: