xslt - 创建用于添加序列的递归字符串函数

标签 xslt xslt-2.0

我有一个具有挑战性的问题,到目前为止我无法解决。

在我的 xlst 中,我有一个包含字符串的变量。 我需要将以下序列 [eol] 添加到此字符串。 在一个固定的位置上,即每65个字符

我想使用一个函数或模板来递归添加这个字符。 原因是字符串长度可以变化。

    <xsl:function name="funct:insert-eol" as="xs:string" >
    <xsl:param name="originalString" as="xs:string?"/>
    <xsl:variable name="length">
        <xsl:value-of select="string-length($originalString)"/>
    </xsl:variable>
    <xsl:variable name="start" as="xs:integer">
        <xsl:value-of select="1"/>
    </xsl:variable>
    <xsl:variable name="eol" as="xs:integer">
        <xsl:value-of select="65"/>
    </xsl:variable>
    <xsl:variable name="newLines">
        <xsl:value-of select="$length idiv number('65')"/>
    </xsl:variable>
    <xsl:for-each select="1 to $newLines">
        <xsl:value-of select="substring($originalString, $start, $eol)" />
    </xsl:for-each>
    </xsl:function>

我写的代码越多,我需要引入的变量就越多。这仍然是我理解上的不足。

例如我们想要每 5 个字符一个 [eol]

aaaaaaabbbbbbbcccccccc

aaaaa[eol]aabbb[eol]bbbcc[eol]ccccc[eol]cc


希望有人给我一个起点..

问候德克

最佳答案

相当直接和简短——不需要递归(甚至可以指定为单个 XPath 表达式):

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:param name="pLLength" select="5"/>

 <xsl:template match="/*">
  <xsl:variable name="vText" select="string()"/>

  <xsl:for-each select="1 to string-length($vText) idiv $pLLength +1">
    <xsl:value-of select="substring($vText, $pLLength*(position()-1)+1, $pLLength)"/>
    <xsl:if test=
    "not(position() eq last()
       or position() eq last() and string-length($vText) mod $pLLength)">[eol]</xsl:if>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于此 XML 文档时:

<t>aaaaaaabbbbbbccccccccc</t>

产生了想要的、正确的结果:

aaaaa[eol]aabbb[eol]bbbcc[eol]ccccc[eol]cc

处理此 XML 文档时:

<t>aaaaaaabbbbbbcccccccccddd</t>

再次产生了想要的、正确的结果:

aaaaa[eol]aabbb[eol]bbbcc[eol]ccccc[eol]ccddd[eol]

关于xslt - 创建用于添加序列的递归字符串函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083877/

相关文章:

xslt - 从 DocBook 中的 'list of figures' 中删除引用

xml - 如何对包含数字但有时也包含字母的 XML 条目进行排序?

xslt - FOP : fo:block width attribute ignored?

xml - XSLT-Xpath比较属性

java - 使用 xslt 将文本转换为 xml

xml - 根据 XSL 中的条件动态输出元素?

xml - 多个 XSLT 文件到 2 个不同 xml 文件的单个 XSLT 文件

xslt - XSLT 中的字符串比较

html - 从 XML 结构中的纯文本创建 HTML 列表

regex - XSLT - 正则表达式解析