XSLT 1.0如何获得不同的值

拉维

我有一个与下面所示类似的XML。我必须找到独特的类别。XSLT 2.0中有许多简单的方法。但是我必须坚持1.0 :(。经过几番努力后,我找到了解决方案。我想到了共享。可能对某人有帮助。请改善我的回答。谢谢。

<root>
  <category>
    this is Games category
  </category>
  <category>
    this is Books category
  </category>
  <category>
    this is Food category
  </category>
  <category>
    this is Games category
  </category>
  <category>
    this is Books category
  </category>
  <category>
    this is Food category
  </category>
  <category>
    this is Travel category
  </category>
  <category>
    this is Travel category
  </category>
</root>

解决方案。我已经在答案部分中添加了。谢谢。

拉维

解决方案

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:variable name="test">
            <xsl:call-template name="delimitedvalues">
                <xsl:with-param name="paramvalues" select="//category" />
            </xsl:call-template>
        </xsl:variable>

        <xsl:call-template name="distinctvalues">
            <xsl:with-param name="values" select="$test" />
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="distinctvalues">
        <xsl:param name="values"/>
        <xsl:variable name="firstvalue" select="substring-before($values, ',')"/>
        <xsl:variable name="restofvalue" select="substring-after($values, ',')"/>
        <xsl:if test="contains($values, ',') = false">
            <xsl:value-of select="$values"/>
        </xsl:if>
        <xsl:if test="contains($restofvalue, $firstvalue) = false">
            <xsl:value-of select="$firstvalue"/>
          <xsl:text>,</xsl:text>
        </xsl:if>
        <xsl:if test="$restofvalue != ''">
            <xsl:call-template name="distinctvalues">
                <xsl:with-param name="values" select="$restofvalue" />
            </xsl:call-template>
        </xsl:if>
    </xsl:template>

    <xsl:template name="delimitedvalues">
        <xsl:param name="paramvalues" />
        <xsl:value-of select="substring-before(substring-after($paramvalues,'this is '),' category')"/>
        <xsl:if test="$paramvalues/following::category">
            <xsl:text>,</xsl:text>
            <xsl:call-template name="delimitedvalues">
                <xsl:with-param name="paramvalues" select="$paramvalues/following::category" />
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出

Games,Books,Food,Travel

源代码

http://www.xsltcake.com/slices/0iWpyI

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从表1和表2中获得不寻常的值

来自分类常见问题

xslt 1:检查节点是否包含列表中的任何值

来自分类Dev

xslt 1:检查节点是否包含列表中的任何值

来自分类Dev

在 xslt 版本 1 中显示唯一值

来自分类Dev

如何获得不同值的数量?MySQL的

来自分类Dev

如何使用XSLT在日期中增加1天

来自分类Dev

如何使用XSLT-1从格式文本中分离标签?

来自分类Dev

如何使用XSLT转换/翻译/替换'[AZ]','[1-26]'

来自分类Dev

如何使用XSLT在日期中增加1天

来自分类Dev

如何在XSLT中执行不同的XSLT?

来自分类Dev

xslt位置总是返回1

来自分类Dev

使用XSLT1,如何简单地分配以1开头的增量值?

来自分类Dev

如何通过使用c#MongoCursor获得不同的值?

来自分类Dev

如何使用golang在mongodb中获得不同的值

来自分类Dev

如何获得不同范围的单元格中的值?

来自分类Dev

如何从对象的嵌套列表中获得不同的值?

来自分类Dev

如何获得不同的输出?

来自分类Dev

获得超过 1 个不同值的结果

来自分类Dev

从XSLt-版本1中的字符串中删除值

来自分类Dev

SHA1 MessageDigest和CommonCrypto更新获得不同的结果

来自分类Dev

如何在XSLT 1中按三个级别的节点值对XML节点进行分组?

来自分类Dev

如何在XSLT 2.0中减去1天(计算前一天)?

来自分类Dev

XSLT。如何对1个元素进行2次更改?订购和重命名

来自分类Dev

如何解决“ [xslt]找不到匹配的1参数函数”的异常?

来自分类Dev

如何使用XSLT 1查找字符串中的所有数字

来自分类Dev

XSLT 1.0的组值

来自分类Dev

XSLT节点值比较

来自分类Dev

xslt输出怀疑值

来自分类Dev

XSLT:组合属性值