XSLT 文件中使用 C#/JScript/VB 自定义函数

在用 XSLT 转换 XML 到其他格式时,不光是原数据搬到别处,还可能需要对数据进行一定的处理,比如一个标志位要 XSLT 转换为表义字符串(1->True; 0->False),或者日期类型格式的转换等等。所以这时候我们在 XSLT 中要用到函数来处理这些细节上的转换。

XSLT 含有超过 100 个内建的函数,XQuery 1.0、XPath 2.0 以及 XSLT 2.0 共享相同的函数库。
这些函数用于字符串值、数值、日期和时间比较、节点和 QName 操作、序列操作、逻辑值,等等。

关于 XSLT 的内置函数请参数:XSLT 函数参考手册 和 XPath、XQuery 以及 XSLT 函数阅读全文 >>

类别: XML/DOM. 标签: , , , . 阅读(569). 评论(0) »

在VB中进行条件编译

因为工作的需要,在某些时候又要拣一拣令我生厌的VB,是要在别人代码的基础上进行修改。看人家代码都是写连接字符串、用户名和密码都写两套,开发时用一套,注释另一套,发布时反过来,更加了VB还只能行注释。我一看就嫌这麻烦,宁愿多思考思考,看看有啥好办法能偷偷懒,当这事,条件编译了。

以前就没怎么用过VB,更别提VB中条件编译了,Goole搜,发现VB中可以用几个预编译指令: #Const、#If .Then ...#ElseIf.Then...#Else...#End If

#Const 声明一个常量,相当于宏定义,用#Const定义的只能被当前模块识别。例如定义常 DebugVer =1,标明是调试版本:

#Const DebugVer = 1

然后,数据库连接串写成

#If DebugVer = 1 Then  '或者是#If DebugVer Then VB和C、C++也一样,非零为真
connStr = "Provider=OraOLEDB.Oracle;Data Source=Fraud-Test;User Id=Unmi;Password=testpwd;"
#Else
connStr = "Provider=OraOLEDB.Oracle;Data Source=Fraud;User Id=user;Password=pwd";
#End If

要发布到正式环境时编译前只需要把 #Const DebugVer = 1 改为 #Const DebugVer = 1 就 OK 了。

朋友能看到这儿来,我可就告您了,我是不支持用 #Const来定义常量来进行条件编译,一则 #Const 只被当前模块认得,换着别地儿又要再写上,切换个编译条件得同步着改好几处,万一哪一处忘改了,可能就会生出个怪胎来;二则#Const 穿插在代码里头就不高明,切换编译条件要找代码。

虽然VB并不提供象VC和VS.NET中那样预设有 DEBUG 和 RELEASE 版,但也有Project Properties让您去设置编译条件,就在打开的Project Properties窗口的 Make 页的 Conditional Compilation Arguments中输入,比如输入 DebugVer = 1,如果要定义多个条件就用冒号隔开,如: OSVer=98 : DebugVer=1 (好象只能定义数值哦!,用#Const就没这个限制,可以是#Const OSVer=Win98, 用数字也足够表达意义)。在Project Properties中定义的编译条件是项目全局的,省了每个模块都用#Const,而且改起来也特方便,又不侵入代码。

在VC中我一般用 #ifdef DEBUG 来判断,可是在 VB 中 DEBUG 已经被占用,偶一次输入 debug_version ,然后一回车,VB把 debug_version 变成了全大写 DEBUG_VERSION, 说明 VB 认可了 DEBUG_VERSION,但并未为您预先定义好,还是需要在 Project Properties中加上 DEBUG_VERSION条件,如 DEBUG_VERSION = 1。另外,在Project Properties中定义的条件能立即被VB认出来,体现在代码自动格式化成定义的形式。

再列举一个较为完整的用法,演示依据定义编译何种平台下的二进制码:

#If OSVer = 95 Then
'WIN95 Code here
#ElseIf OSVer = 98 Then
'WIN98 Code here
#ElseIF OSVer = XP Then
'WINXP Code here
#Else
'Non-specific OS here
#End if

需要在之前用#Const或在Project Properties中定义OSVer,当然如果不定义,也不会错,编译器会认为OSVer的值为零或者是 False。

参考:VB中的条件编译(注意该文中提到定义OSVer=WINXP: DebugVer=True在Project Properties中应该通不过,只能定义数值),还有MSDN关于VB条件编译的内容。

类别: C++/VB. 标签: . 阅读(54). 评论(0) »

VB采用ADO的方式操作Excel表格

使用VB配搭着ADO可以像操纵Access数据文件一样操作Excel文件,对于如何用ADO操作Excel文件,首先应该建立一些基本概念。你需要将一个Excel数据文件想象为一个关系数据库,Excel文件中的每个工作表就对应该数据库中的一个表,而工作表中的每一列当然就是表的列了。

代码如下:操作 book1.xls 的 sheet1 工作表,注意要写成 sheet1$ (加个美元符号) 阅读全文 >>

类别: C++/VB. 标签: , , . 阅读(601). 评论(0) »