以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  关于xslt输出不重复内容的问题 谢谢  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=64546)


--  作者:fenjin
--  发布时间:7/11/2008 5:01:00 AM

--  关于xslt输出不重复内容的问题 谢谢
各位大哥,
小弟有这样一个问题:
//xml
<root>
<A>
    <buy>apple</buy>
    <wo>a</wo>
</A>
<A>
<buy>apple</buy>
    <wo>c</wo>
</A>
<A>
<buy>banana</buy>
    <wo>a</wo>
</A>
<A>
<buy>banana</buy>
    <wo>b</wo>
</A>
<A>
<buy>watermelon </buy>
    <wo>b</wo>
</A>
</root>


想输出这样的结果》
c:apple
a:apple, banana
b:banana, watermelon

就可以理解成3个人,输出每个人都买了什么东西。
不知道用xsl怎么实现,往各位赐教,万分感谢


--  作者:Qr
--  发布时间:7/11/2008 12:21:00 PM

--  
给你个思路吧:
用命名模板,取得第1个wo,并赋给变量tmp和all(这个变量将所有但不重复的wo组合起来,便于用contains判断下一个wo是否已经输出过),然后通过<xsl:apply-templates select="//A[wo='$tmp']/buy"/>就可以输出特定wo的所买的东西了。
--  作者:fenjin
--  发布时间:7/17/2008 7:05:00 AM

--  
看见这么多人看我的问题,不胜感激,大哥能不能再给说说 all 这个变量怎么实现,我现在就卡在这里,all设成<xsl:param name="all"..../>还是什么样的变量?param怎么改变?我本来是想 for-each每一次都可以得到新的wo, 用string-join加在all里。可是怎么实现?都困扰我还几天了,谢谢帮忙
--  作者:Qr
--  发布时间:7/19/2008 11:10:00 AM

--  
<xsl:call-template>
<xsl:param>
<xsl:with-param>
<xsl:variable>
另,concat()可以将字符串连接
--  作者:sxchow
--  发布时间:7/22/2008 9:06:00 AM

--  
楼主给个你解决问题后的xsl来看看吧
偶是新手,没明白Qr的思路
谢谢
--  作者:fenjin
--  发布时间:7/26/2008 4:33:00 AM

--  
我近来看了一本xslt2.0的书,2.0有一个新的函数,for in return ,我觉得是可以解决这个问题的让我举个例子,希望大家讨论

<xsl:value-of select="for $a in distinct-values(//wo)  return($a,for $b in //buy[wo=$a] return ( $b/buy )) " />


就是现选择不同的wo,这样就不会有重复的项,再选择wo=$a的buy

关于xslt1.0的方法 我觉得可以用last(),就相当于对于重复的wo只选择最后一个,试出来我就把程序帖出来


--  作者:东方小牛
--  发布时间:7/26/2008 9:54:00 AM

--  
楼主 最近读了本 xslt2.0的书? 书名叫啥? 中文的么?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms