如何对于XML文档实现"select distinct .."的类似操作(使用XSL)

rick1126 2001-11-08 09:23:49
针对如下XML文档, 来自数据库
...
<prog id="节目表的主键">
<item id="节目项表的主键" fid="其它候选键"/>
</prog>
...
问题是, 因为节目和节目项是1:m关系, 我如何将上述文档使用XSL的方式得到一个按照节目-节目项层次的节目项不重复的结果集合???

我在现有的XSL中使用
<xsl:if exp="checkDup( @id )">
...
</xsl:if>

没有报错, 但是显然预定义在<xsl:script>中的checkDup函数并没有被调用和发挥作用, 我该怎么办???
...全文
280 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick1126 2001-11-09
  • 打赏
  • 举报
回复
是我自己搞错了, 不好意思, 应该是<xsl:if expr不是exp
karma 2001-11-08
  • 打赏
  • 举报
回复
把现实的例子用XML表示出来吧,用例子说清楚你想要什么样的排列
karma 2001-11-08
  • 打赏
  • 举报
回复
1.
<programs>
<prog id="A1">
<item id="a1" fid="a111"/>
<item id="a2" fid="b111"/>
<item id="a1" fid="a222"/>
</prog>
<prog id="B1">
<item id="b1" fid="aaaaa"/>
</prog>
<prog id="C1">
<item id="c1" fid="aaaaa"/>
</prog>
</programs>

2.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="itemid" match="item" use="concat(../@id,'#',@id)" />
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="prog">
<DL><xsl:value-of select="@id" /><OL>
<xsl:for-each select = "item[count(.|key('itemid',concat(current()/@id,'#',@id))[1])=1]">
<LI><xsl:value-of select="@id" /></LI>
</xsl:for-each>
</OL>
</DL>
</xsl:template>

</xsl:stylesheet>
rick1126 2001-11-08
  • 打赏
  • 举报
回复
好的. 就是希望得到一个二层结构, 第一层是节目信息, 内嵌不重复的节目项信息, 区分标志是节目项号, 即过滤那些重复的节目项, 只保留一个显示.

我的其它联系方式
1. http://www3.ccw.com.cn IT技术村 C/C++ 论坛 [rick1126]
2. oicq: 329170
3. msn: bbitrickzhang@sina.com
4. 雅虎通: rick1126
5. email:rickzhang@sina.com
欢迎一起学习讨论.

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧