В XSLT 2.0 у меня есть параметр, который входит в виде строки имен документов с разделителями, например: ms609_0080.xml~ms609_0176.xml~ms609_0210.xml~ms609_0418.xml
I tokenize()
этой строки и циклически перебирайте ее с xsl:for-each
для передачи каждого документа вkey
.Затем результаты из ключа я собираю в строку с разделителями-запятыми для вывода на экран.
<xsl:variable name="list_of_corresp_events">
<xsl:variable name ="tokenparam" select="tokenize($paramCorrespdocs,'~')"/>
<xsl:for-each select="$tokenparam">
<xsl:choose>
<xsl:when test=".[position() != last()]">
<xsl:value-of select="document(concat($paramSaxondatapath, .))/(key('correspkey',$correspid))/@xml:id"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(document(concat($paramSaxondatapath, .))/(key('correspkey',$correspid))/@xml:id, ', ')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
Все работает нормально, за исключением того, что когда я вывожу переменную $list_of_corresp_events
, она выглядит следующим образом, с неожиданной запятой:
ms609-0080-2, ms609-0176-1, ms609-0210-1, ms609-0418-1,
Обычнопоследняя запятая не должна появляться на основе test=".[position() != last()]"
?Возможно, позиции не работают для токенизированных данных?Я не видел способа применить string-join()
к этому.
Большое спасибо.