以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  在xsl中如何对rowset data field中的字符型变量进行操作?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=76428)


--  作者:whlxy
--  发布时间:8/19/2009 11:24:00 AM

--  在xsl中如何对rowset data field中的字符型变量进行操作?
我对xsl不是很熟悉.
这个问题的引出是这样的
microsoft sharepoint 中有两个列表,其中@userdetail是第一个列表的datafield ,包含了用户名以及用户的其他信息@username 是第二个列表的datafield,包含了用户名.
sharepoint系统自动生成了诸如
rs:data/z:row/[@userdetail=$parentrow/@username]" 这样的xslt表达式.意思是当两个列表的@userdetail和@username datafield的值相等时,则进行一些操作.
我的问题是现在@userdetail中的值是诸如"好人张三科长"这样的,@username中的值是"张三"这样的,如果按照系统自动生成的rs:data/z:row/[@userdetail=$parentrow/[@username]"来计算,则xslt不能正常返回我需要的结果.

现在我想通过某种方式的字符运算,把"好人张三科长",计算成"张三",然后再运行rs:data/z:row/[@userdetail=$parentrow/[@username]",这样就能返回我的结果了,

请告诉我我该如何计算


--  作者:Qr
--  发布时间:8/19/2009 1:21:00 PM

--  
contains(@userdetail,@username)
如果 @userdetail=好人张三科长,@username=张三,那么contains()返回true
如果 @userdetail=好人张三科长,@username=李四,那么contains()返回false

就是说,contains的第二个参数包含在第一个参数中,那么返回true否则返回false
可以通过这个XPath函数来解决,当然,还有另外几个string函数也可以。


--  作者:whlxy
--  发布时间:8/19/2009 2:00:00 PM

--  
以下是引用Qr在2009-8-19 13:21:00的发言:
contains(@userdetail,@username)
如果 @userdetail=好人张三科长,@username=张三,那么contains()返回true
如果 @userdetail=好人张三科长,@username=李四,那么contains()返回false

就是说,contains的第二个参数包含在第一个参数中,那么返回true否则返回false
可以通过这个XPath函数来解决,当然,还有另外几个string函数也可以。


问题的关键是是从xslt语法上来说,是不允许对@username这样的datafield直接进行contains sustring-befor after 这样的函数操作,操作之后是包错的,怪我没说清楚,请问如何解决??领导,可能是我说的不是很清楚.contains,sutstring-before,substringafter函数我都知道,"好人张三科长"只是我的一个例子,在实际的数据中,他还可能是"好人李四科长"
在我的实际应用中,我的"好人张三科长"是一个200个字符的html字符串,但是这个字符串是有规律的,我可以通过substring-before 和substring-after来获得和@username一样的字符,从而达到我的目的.我实际是这样作的
rs:data/z:row/[@userdetail=$parentrow/substring-before(@username,'</A')]",但是
系统说这样的表达是错误的,我的意思是哪种表达方式系统不会报错.比如说在系统报错后,我又写成了<xsl:variable name="username">substing-before(@username,'&lt;/A')</xsl:variable>
rs:data/z:row/[@userdetail=$parentrow/$username,]"
系统也抱错.现在的主样问题是如何把我们的思想用准确的xsl语句表达出来,现在思想我已经有了,就是用substring-before 和after,但是应该如何表述呢?rs:data/z:row/[@userdetail=$parentrow/[@username]",系统是不报错的,我的substring-before 和after应该怎么表述呢?


--  作者:hexun831012
--  发布时间:8/19/2009 3:32:00 PM

--  
rs:data/z:row/[@userdetail=$parentrow/substring-before(@username,'&lt;/A')]
!!!
rs:data/z:row/[@userdetail = substring-before($parentrow/@username, '&lt;/A')]

--  作者:whlxy
--  发布时间:8/20/2009 8:43:00 AM

--  
以下是引用hexun831012在2009-8-19 15:32:00的发言:
rs:data/z:row/[@userdetail=$parentrow/substring-before(@username,'&lt;/A')]
!!!
rs:data/z:row/[@userdetail = substring-before($parentrow/@username, '&lt;/A')]


谢谢领导!通过了!!
对你的仰慕如滔滔洪水!!!


--  作者:hexun831012
--  发布时间:8/20/2009 5:29:00 PM

--  
以下是引用whlxy在2009-8-20 8:43:00的发言:
[quote]以下是引用hexun831012在2009-8-19 15:32:00的发言:
rs:data/z:row/[@userdetail=$parentrow/substring-before(@username,'&lt;/A')]
  !!!
  rs:data/z:row/[@userdetail = substring-before($parentrow/@username, '&lt;/A')]
  
[/quote]

谢谢领导!通过了!!
对你的仰慕如滔滔洪水!!!


小菜,你还没习惯Xpath语法


--  作者:hjx_221
--  发布时间:8/21/2009 2:11:00 PM

--  
学习一下

!!!!!!


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