XSLT 1.0拆分长字符串方面的回车符

时间:2017-04-04 06:23:41

标签: xslt-1.0

我需要转换这种文本元素,

    <text>Testataan miten systeemi tekee rivinvaihtoja kun niitä ei ole erikseen lisätty. Tämä teksti kirjoitettu putkeen ilman rivinvaihtoja. Tämä teksti lisätty muistilappuun, mutta vieläkään ei tehty yhtään rivinvaihtoa tarkoituksella. Ilmestyykö sellaisia kuitenkin, jäädään odottamaan..

- tämä teksti lisätty ja laitettu pari rivinvaihtoa
- ja toinenkin rivi alle</text>

进入这种结构

<_-WRP_-SF_1SACTTXTL SEGMENT="1">
    <TDFORMAT>=</TDFORMAT>
    <TDLINE>Testataan miten speedo tekee rivinvaihtoja kun niitä ei ole erikseen lisätty. Tämä teksti kirjoitettu putkeen ilman rivinvaihtoja. </TDLINE>
  </_-WRP_-SF_1SACTTXTL>
  <_-WRP_-SF_1SACTTXTL SEGMENT="1">
    <TDFORMAT>=</TDFORMAT>
    <TDLINE>Tämä teksti lisätty muistilappuun, mutta vieläkään ei tehty yhtään rivinvaihtoa tarkoituksella. Ilmestyykö sellaisia kuitenkin, jää</TDLINE>
  </_-WRP_-SF_1SACTTXTL>
  <_-WRP_-SF_1SACTTXTL SEGMENT="1">
    <TDFORMAT>=</TDFORMAT>
    <TDLINE>dään odottamaan..</TDLINE>
  </_-WRP_-SF_1SACTTXTL>
  <_-WRP_-SF_1SACTTXTL SEGMENT="1">
    <TDFORMAT>*</TDFORMAT>
    <TDLINE>- tämä teksti lisätty ja laitettu pari rivinvaihtoa</TDLINE>
  </_-WRP_-SF_1SACTTXTL>
  <_-WRP_-SF_1SACTTXTL SEGMENT="1">
    <TDFORMAT>*</TDFORMAT>
    <TDLINE>- ja toinenkin rivi alle</TDLINE>
  </_-WRP_-SF_1SACTTXTL>

正如您所看到的,第一部分包含一个长字符串,最后有一些带有回车符的行。需要在每132个字符上拆分长字符串,标签为TDFORMAT值&#34; =&#34;和带有回车符的行带有标签TDFORMAT,值为&#34; *&#34;。我已经用这个模板实现了几乎可行的解决方案

<xsl:template name="split">
        <xsl:param name="text" select="."/>
        <xsl:if test="string-length($text) > 0">
            <xsl:variable name="output-text">
                <xsl:value-of select="normalize-space(substring-before(concat($text, '&#xA;'), '&#xA;'))"/>
            </xsl:variable>
            <xsl:choose>
                <xsl:when test="string-length($output-text) &lt; 132">
                    <xsl:if test="normalize-space($output-text) != ''">
                        <_-WRP_-SF_1SACTTXTL SEGMENT="1">
                        <TDFORMAT>*</TDFORMAT>
                            <TDLINE>
                                <xsl:value-of select="$output-text"/>
                            </TDLINE>
                        </_-WRP_-SF_1SACTTXTL>
                    </xsl:if>

                    <xsl:call-template name="split">
                        <xsl:with-param name="text" select="substring-after($text, '&#xA;')"/>
                    </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:if test="normalize-space($output-text) != ''">
                        <_-WRP_-SF_1SACTTXTL SEGMENT="1">
                            <TDFORMAT>=</TDFORMAT>
                            <TDLINE>
                                <xsl:value-of select="substring($output-text, 1, 131)"/>
                            </TDLINE>
                        </_-WRP_-SF_1SACTTXTL>
                    </xsl:if>
                    <xsl:call-template name="split">
                        <xsl:with-param name="text" select="substring($text, 132 )"/>
                    </xsl:call-template>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:if>
    </xsl:template>

问题是长字符串(小于132)的剩余字符,它产生带有值&#34; *&#34;的TDFORMAT标记。

0 个答案:

没有答案