Помимо хорошего ответа @LarsH (+1), если вы застряли с XSLT 1.0, вы можете использовать функцию / шаблон str-split-to-words
FXSL :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common">
<xsl:import href="strSplit-to-Words.xsl"/>
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:variable name="vwordNodes">
<xsl:call-template name="str-split-to-words">
<xsl:with-param name="pStr" select="/"/>
<xsl:with-param name="pDelimiters"
select="':'"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="ext:node-set($vwordNodes)/*[5]"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML (с добавленным определением пространства имен, чтобы сделать его правильно сформированным):
<ns5:folio xmlns:ns5="unknown!!!" >
<ns5:portfolioName ns5:portfolioNameScheme="test">ROOT:B1:B2:B3:B4:B5:B6</ns5:portfolioName>
</ns5:folio>
желаемый, правильный результат получается :
B4
Do note : Это решение очень простое в использовании (просто измените [5]
на [1000]
) в случае, если нам нужно извлечь 1000-й компонент в строке, разделенной двоеточиями.