我想要獲取XSLT中字符串的自定義生成序列的唯一值。 由於我必須首先在'。'上分割一個字符串,因此手頭的問題相當不尋常。和最後一位的印章,這工作正常,但使用XSLT 2.0不同值獲取唯一值不是。使用XSLT函數從序列中獲取不同值
鑑於一些輸入
<TreeNumberList>
<TreeNumber>A01.001.001</TreeNumber>
<TreeNumber>A01.001.002</TreeNumber>
<TreeNumber>A01.001.003</TreeNumber>
<TreeNumber>A01.002.111</TreeNumber>
</TreeNumberList>
所需的輸出將是
A01.001, A01.002
可迭代序列到目前爲止,我有以下功能
<xsl:function name="func:strip-last">
<xsl:param name="str"></xsl:param>
<xsl:value-of select="substring($str, 1, string-length($str) - 1)"></xsl:value-of>
</xsl:function>
<xsl:function name="func:parent-of">
<xsl:param name="nodes"></xsl:param>
<xsl:variable name="output">
<xsl:for-each select="$nodes">
<xsl:variable name="parent">
<xsl:for-each select="tokenize(., '\.')">
<xsl:if test="position() != last()">
<xsl:value-of select="."></xsl:value-of>
<xsl:text>.</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<tmp><xsl:value-of select="func:strip-last($parent))"></xsl:value-of></tmp>
</xsl:for-each>
</xsl:variable>
<xsl:sequence select="distinct-values($output/*)"></xsl:sequence>
</xsl:function>
但這並不返回一組不同的元素,而是一系列涉及的所有元素。最終的代碼會更有意思,因爲TreeNumbers本身不會是唯一的,但是通過密鑰查找將獲取某個名稱。 (對於那些識別標記,它是MeSH XML的一部分)
我也嘗試過使用key-ed索引或group-by來獲得唯一性,但那些文檔片段沒有很好地發揮作用。
不錯!這比'xsl:analyze-string'容易得多。我總是忘記'replace()'。 +1 –