1
我有以下输入XML:XSLT 2.0:上的for-each循环子串-后获得不同值
<img src="blah.jpg"/>
<img src="blahh.jpg"/>
<img src="blah.gif"/>
我需要的文件类型的不同输出字符串,格式为:
jpg|gif
我现有的样式表得到了一些方式:
<xsl:for-each select="distinct-values(descendant::img/@src)">
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:value-of select="concat(substring-after(.,'.'),'|')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-after(.,'.')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
不过,我得到一个复制的文件类型,因为我不能把子字符串 - 在for-each循环之后(它会抛出一个错误,因为您无法执行子字符串 - 在多个字符串之后)。这意味着我只能获得整个@src属性的distinct-values(而不是句点之后的字符串)。所以我的输出目前看起来像这样:
jpg|jpg|gif
我真的很感激一个简单的XSLT 2.0解决方案,使我能够做到这一点。
非常感谢您的时间提前 - 真的很感激它。
这就是机票 - 非常感谢。 = D对于那些偶然发现同样问题的人,你需要从for-each中的两个值语句中删除substring-after(),否则你将不会得到输出。 – Aaron
为了说明带有多个'.'的文件名,你可以'tokenize(@src,'。')[last()]'而不是substring-after。 –