在Biztalk的Orchestration中我们经常通过在Variables中定义各种.Net类型的变量,以丰富我们在Orchestration的操作,但在Orchestration中定义的string却与我们平常在.Net中使用的string有所不同,string在Orchestration中仅能对其进行赋值和合并,但string类型的属性和方法均不能使用,由于诸如Length,Replace,Substring等一些经常使用的操作均不能使用,导致我们在Orchestration中对string变量的操作相当的不方便。
过往要在Orchestration中操作字符串,只能先自己写一个封装了字符串操作的类库,在Biztalk项目中引用该类库,然后在Orchestration调用类库的方法来达到目的。但这样的话,在部署时同时要将相应的类库dll部署到GAC中,无形中增加了biztalk部署的复杂程度。
其实我们也可以通过在Orchestration中使用xpath函数达到对string进行操作的目的。在Biztalk中内建了对xpath的支持,比如我们要获取指定Message中某节点的个数,可以使用如下的方法:
由于xpath内建了对string操作的支持,我们可以通过使用xpath对string进行操作,xpath中的string函数有:
concat
Returns the concatenation of the arguments.
contains
Returns true if the first argument string contains the second argument string; otherwise returns false.
normalize-space
Returns the argument string with the white space stripped.
starts-with
Returns true if the first argument string starts with the second argument string; otherwise returns false.
string
Converts an object to a string.
string-length
Returns the number of characters in the string.
substring
Returns the substring of the first argument starting at the position specified in the second argument and the length specified in the third argument.
substring-after
Returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string.
substring-before
Returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string.
translate
Returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string.
关于xpath的详细信息可以参考:http://msdn2.microsoft.com/en-us/library/ms256180(VS.80).aspx 。有了xpath我们就可以在Expression shape中像下面这样处理string,获取接收文件的后缀名(假设pathExpress, sPath,sExtend是string类型的变量):
pathExpress = " string-length(' " + sPath + " ') " ;
iLen = (System.Int32)xpath(Msg_Incoming, pathExpress); // 使用xpath获取string的长度
pathExpress = " substring(' " + sPath + " ', " + System.Convert.ToString(iLen - 2 ) + " , 3) " ;
sExtend = (System.String)xpath(Msg_Incoming, pathExpress); // 使用Substring获取后缀名