0

我将字符串标记为空格分隔的单词

<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(.,'&#xA;')">
            <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

每个单词的输出长度

4

1 回答 1

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>
于 2013-10-23T11:54:04.413 回答