我将字符串标记为空格分隔的单词
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings" exclude-result-prefixes="str">
<xsl:include href="str.tokenize.xsl"/>
<xsl:template match="/string/upara">
<root>
<xsl:for-each select="str:tokenize(.,'
')">
<row>
<xsl:for-each select="str:tokenize(.,',')">
<elem><xsl:value-of select="."/></elem>
</xsl:for-each>
</row>
</xsl:for-each>
</root>
</xsl:template>
它始终在第一行的str:tokenize()函数处停止。问题是什么?我正在使用 Altova XML Spy 。
期望的行为:
Input:This is a small string
Output: 4 2 1 5 6
每个单词的输出长度
答案 0 :(得分:0)
您提供的XSLT示例首先按换行符拆分输入字符串,然后对每一行用comman拆分它(因此,它用于处理CSV文件)
如果你只是处理一行,并希望用空格分割,你可以这样做
<xsl:for-each select="str:tokenize(.,' ')">
然后你可以使用 string-length 来查找每个单词的长度。
试试这个模板
<xsl:template match="/string/upara">
<root>
<xsl:for-each select="str:tokenize(.,' ')">
<xsl:value-of select="string-length(.)" />
<xsl:text> </xsl:text>
</xsl:for-each>
</root>
</xsl:template>
编辑:如果您使用的是Altova XML SPY,那么我相信这支持XSLT 2.0。这意味着您不需要包含任何EXSLT扩展函数,因为XSTL 2.0作为内置的标记化函数
请尝试使用此XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/string/upara">
<root>
<xsl:for-each select="tokenize(.,' ')">
<xsl:value-of select="string-length(.)" />
<xsl:text> </xsl:text>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>