我是XSLT的新手,我在xslt上阅读了一些内容。我无法实现解决方案。
我的意见是这样的。
<?xml version="1.0"?>
<root>
<line1>Hello world, XSLT is Functional programming? additional info</line1>
</root>
必需的输出
<line1>Hello world, XSLT is<br/>Functional programming?<br/>additional info</line1>
我的条件是
<DIV width="20pt">
的总大小我需要根据20个字符的最大大小来打破字符串IF字符串位置是20包含空格分隔并继续到下一个,否则如果字符串位置是19包含空格分隔与19位置。
对不起英语非常糟糕。
让我知道这可以在XSLT中完成,这里的变量是不可变的。我无法追加价值观。
任何提示都是......
谢谢, Umesha
答案 0 :(得分:1)
在XSLT 1.0中,您可以使用递归模板通过检查20或21位置是否有空格来拆分字符串。 (或者如果长度首先小于20)
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="text()[normalize-space()]" priority="2">
<xsl:call-template name="split" />
</xsl:template>
<xsl:template name="split">
<xsl:param name="text" select="."/>
<xsl:param name="limit" select="20" />
<xsl:choose>
<!-- Text length is less than or equal 20 characters -->
<xsl:when test="string-length($text) <= $limit">
<xsl:value-of select="$text" />
</xsl:when>
<!-- 20th or 21st character is a space -->
<xsl:when test="contains(substring($text, $limit, 2), ' ')">
<xsl:value-of select="substring($text, 1, $limit)" />
<br />
<xsl:call-template name="split">
<xsl:with-param name="text" select="normalize-space(substring($text, $limit + 1))" />
</xsl:call-template>
</xsl:when>
<!-- Find first space after 20th character and split on that -->
<xsl:otherwise>
<xsl:value-of select="substring($text, 1, $limit)" />
<xsl:value-of select="substring-before(substring(concat($text, ' '), $limit + 1), ' ')" />
<br />
<xsl:call-template name="split">
<xsl:with-param name="text" select="substring-after(substring($text, $limit + 1), ' ')" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:-1)
根据评论进行编辑。
如果您有权访问xslt 2.0,则可以使用以下替换功能。
<line1>
<xsl:analyze-string select="." regex=".{{1,20}}\s" flags="x">
<xsl:matching-substring>
<xsl:value-of select="."/>
<br>
</xsl:matching-substring>
<xsl:non-matching-substring>
</xsl:non-matching-substring>
</xsl:analyze-string>
</line1>
。{{1,20}} [\ s]以贪婪的方式(尽可能多)创建1到20个字符的捕获组,然后是[\ s]任何类型的空格。使用analyze-string函数,我们选择任何匹配的子字符串,并在其后添加<br/>
。
此示例导致
<line1>Hello world, XSLT is <br/>Functional <br/>programming? <br/>additional <br/></line1>