XSLT使用空的固定长度空格标记或拆分文本?

时间:2014-08-21 22:29:18

标签: xslt text whitespace tokenize

情景:

我有一个包含6个文本值的元素。

<e1>A B C D E F</e1>

A,B,...,F是多字符固定长度字符串。

我想将这6个文本值映射到6个不同的元素,如

<v1>A</v1>............<v6>F</v6>

我的XSLT包含以下逻辑:

<xsl:variable name="vTokens">
            <TokenValue>
                    <xsl:copy-of select="str:tokenize(.,' ' )"/>
            </TokenValue> 
</xsl:variable>

<v1>
<xsl:value-of select="$vTokens/TokenValue/token[1]"/>
</v1>
<v6>
<xsl:value-of select="$vTokens/TokenValue/token[2]"/>
</v6>

问题:

这些文本值中的任何一个都可以为空,但它是一个固定长度的空白字符串;例如,A可以是14个字符的NULL字符串,它与tokenize中的分隔符混淆。因此,如果缺少B,则元素<v2>将在最终输出中包含C,并且<v6>甚至不存在。

因此,如果输入中缺少B / C / D / E,则结果永远不会包含<v6>元素,并且除了<v1>之外的所有其他元素中都会放置错误的值。

1 个答案:

答案 0 :(得分:0)

这样的东西
<xsl:variable name="s" select="."/>
<xsl:for-each select="1 to string-length($s) div $N">
  <token><xsl:value-of select="substring($s, ., $N)"/></token>
</xsl:for-each>