以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]就是XSL中有没有表达式实现多个值的组合功能,大家进来看下,不好表达。。。?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=58624)


--  作者:wangyongshan
--  发布时间:1/30/2008 9:37:00 AM

--  [求助]就是XSL中有没有表达式实现多个值的组合功能,大家进来看下,不好表达。。。?
请问大家一个问题:
我有这样一个节点: <clue_im type="QQ,MSN,TM,SPKEY" />
type属性值是“QQ,MSN,TM,SPKEY”这4种的任意组合(每个值以,号分隔:比如:type="QQ"、type="QQ,TM"、type="QQ,MSN,TM"等);
现在我要根据其type的属性值进行转换,条件是:只要type的值为“QQ,MSN,TM”3种的一个或多个(也是type的值为QQ,MSN,TM的组合中的一种),就进行转换。
我是这样写的:

  <xsl:if test="@type='QQ' or @type='MSN' or @type='TM' or @type='QQ,MSN' or @type='QQ,TM' or @type='MSN,TM' or @type='QQ,MSN,TM'">
  ..............
</xsl:if>


但是当属性值类型出现很多种时,想这样的枚举是不现实的,请问大家,在XSL中有没有什么表达式可以实现上述的属性值枚举功能?????
项目中出现这种情况,急需要大家的帮助。。。。。。



--  作者:Qr
--  发布时间:1/31/2008 3:58:00 PM

--  
contains(string, string)

如果第一个字符串参数包含第二个字符串参数,contains 函数返回真,否则,返回假。


--  作者:wangyongshan
--  发布时间:1/31/2008 10:41:00 PM

--  
Qr大哥,contains函数这个功能我不太清楚,你能不能把下面的这个判断条件用contains写出来啊:
<xsl:if test="@type='QQ' or @type='MSN' or @type='TM' or @type='QQ,MSN' or @type='QQ,TM' or @type='MSN,TM' or @type='QQ,MSN,TM'">
  ..............
</xsl:if>
谢谢Qr大哥!项目比较急啊。我身边也没有这方面详细的资料或书籍看。。
--  作者:Qr
--  发布时间:2/1/2008 12:17:00 PM

--  
<xsl:if test="contains('QQ,MSN,TM,SPKEY',@type )">如果type包含在被测试字符串,则结果为真,否则为假</xsl:if>

但也有缺陷,如果type="QQ,TM",则结果为假,因为contains要求第二参数必须在第一参数中连续匹配。
解决办法,可以通过XPath是的string 函数来截取type中的各逗号间的字符来匹配。

具体有:
starts-with(string, string)
如果第一个字符串参数以第二个字符串参数起头,starts-with 函数返回真,否则,返回假。

substring-before(string, string)
substring-before 函数返回第一个字符串参数在第二个参数首次出现之前的子字符串,或者,如果第一个字符串参数不包含第二个字符串参数则返回空字符串。例如,substring-before("1999/04/01","/") 返回 1999。

substring-after(string, string)
substring-after 函数返回第一个字符串参数在第二个参数首次出现之后的子字符串,或者,如果第一个字符串参数不包含第二个字符串参数则返回空字符串。例如, substring-after("1999/04/01","/") 返回 04/01,而 substring-after("1999/04/01","19") 返回 99/04/01。

substring( string , number , number? )
substring 函数返回第一个字符串参数从第二个参数所指定的位置开始,以第三个参数为长度的子字符串。例如, substring("12345",2,3) 返回 "234"。如果没有第三个参数,则返回从第二个参数所指定的位置开始直到结束。例如, substring("12345",2) 返回"2345"。

string-length( string? )
string-length 返回字符串中字符的个数。如果参数省略,则缺省为一个上下文节点再转换成字符串,也就是上下文节点的 字串值。


本站也有不少相关资料和贴子,可以下载和翻阅、参考。


--  作者:wangyongshan
--  发布时间:2/1/2008 7:18:00 PM

--  
谢谢Qr大哥!哈哈。。。。。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
45.898ms