例如我有这个xml:
<ns5:folio><ns5:portfolioName ns5:portfolioNameScheme="test">ROOT:B1:B2:B3:B4:B5:B6</ns5:portfolioName></ns5:folio>
我希望xslt在第4个之后找到字符串:在第5个之前: 这是B4。
我该怎么做?
感谢。
答案 0 :(得分:2)
查看substring-before
和substring-after
。
<xsl:variable name="x">ROOT:B1:B2:B3:B4:B5:B6</xsl:variable>
<xsl:value-of select="substring-before(substring-after(substring-after(substring-after(substring-after($x, ':'), ':'), ':'), ':'), ':')"/>
答案 1 :(得分:2)
在XSLT / XPath 2.0中,您可以使用tokenize()
:
tokenize($x, ':')[5]
答案 2 :(得分:1)
除了@LarsH(+1)的好答案之外,如果您遇到XSLT 1.0,可以使用FXSL 的str-split-to-words
函数/模板:< / p>
<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
请注意:此解决方案非常易于使用(只需将[5]
更改为[1000]
),以防我们需要检索冒号中的第1000个组件 - 分开的字符串。