免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4054 | 回复: 3
打印 上一主题 下一主题

请教个xslt字符串转化,剔除重复元素输出问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-23 10:03 |只看该作者 |倒序浏览
20可用积分

  1. <project>
  2.     <file path="C:\dir1\file.txt"/>
  3.     <file path="C:\dir2\abce.txt"/>
  4.     <file path="C:\dir1\dir_new\1234.txt"/>
  5.     <file path="C:\dir1\abce11.txt"/>
  6.     <file path="C:\dir2\abce33.txt"/>
  7. </project>
复制代码


转换后得到这些文件所在目录的列表,目录不重复

  1. <project>
  2.     <dir path="C:\dir1"/>
  3.     <dir path="C:\dir2"/>
  4.     <dir path="C:\dir1\dir_new"/>
  5. </project>
复制代码


请问这些xsl这么写呢?

论坛徽章:
0
2 [报告]
发表于 2009-01-24 10:03 |只看该作者
乔版主。。。。快救救我

论坛徽章:
0
3 [报告]
发表于 2009-01-27 02:21 |只看该作者
此问题无情的考验了我的智商...

论坛徽章:
0
4 [报告]
发表于 2009-01-27 16:54 |只看该作者
没人帮我, 还是自己来...
在这里自说自话真没劲啊


  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="xml" indent="yes"/>

  4. <xsl:template name="make_group">
  5.         <xsl:param name="paths"/>
  6.         <xsl:param name="prefix"/>

  7.         <xsl:for-each select="$paths">
  8.                 <xsl:choose>
  9.                         <xsl:when test="not(starts-with(.,$prefix))">
  10.                         </xsl:when>
  11.                         <xsl:when test="contains(substring-after(.,$prefix),'\')">
  12.                                 <xsl:variable name="id" select="generate-id(.)"/>
  13.                                 <xsl:variable name="folder" select="substring-before(substring-after(.,$prefix),'\')"/>
  14.                                 <xsl:variable name="new_prefix" select="concat($prefix,$folder,'\')"/>
  15.                                 <xsl:if test="$id=generate-id($paths[concat($prefix,substring-before(substring-after(.,$prefix),'\'),'\')=$new_prefix][1])">
  16.                                         <xsl:call-template name="make_group">
  17.                                                 <xsl:with-param name="paths" select="$paths"/>
  18.                                                 <xsl:with-param name="prefix" select="$new_prefix"/>
  19.                                         </xsl:call-template>
  20.                                 </xsl:if>
  21.                         </xsl:when>
  22.                         <xsl:otherwise>
  23.                                 <xsl:variable name="id" select="generate-id(.)"/>
  24.                                 <xsl:if test="$id=generate-id($paths[starts-with(.,$prefix)][1])">
  25.                                         <xsl:element name="dir">
  26.                                                 <xsl:attribute name="path">
  27.                                                         <xsl:value-of select="substring($prefix,1,string-length($prefix)-1)"/>
  28.                                                 </xsl:attribute>
  29.                                         </xsl:element>
  30.                                 </xsl:if>
  31.                         </xsl:otherwise>
  32.                 </xsl:choose>
  33.         </xsl:for-each>
  34. </xsl:template>



  35. <xsl:template match="/">
  36.         <xsl:call-template name="make_group">
  37.                 <xsl:with-param name="paths" select="/project/file/@path"/>
  38.                 <xsl:with-param name="prefix" select="''"/>
  39.         </xsl:call-template>
  40. </xsl:template>
  41. </xsl:stylesheet>


复制代码

[ 本帖最后由 太平绅士 于 2009-1-27 17:00 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP