Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html XSLT 1.0给定字符串如果给定位置是空格,则在该单词之前打断该位置_Html_Css_Xml_Xslt - Fatal编程技术网

Html XSLT 1.0给定字符串如果给定位置是空格,则在该单词之前打断该位置

Html XSLT 1.0给定字符串如果给定位置是空格,则在该单词之前打断该位置,html,css,xml,xslt,Html,Css,Xml,Xslt,我是XSLT新手,我读了一些关于XSLT的东西。我无法解决这个问题 我的输入是这样的 <?xml version="1.0"?> <root> <line1>Hello world, XSLT is Functional programming? additional info</line1> </root> 你好,世界,XSLT是函数式编程吗?附加信息 所需输出 <line1>Hello world, XSLT i

我是XSLT新手,我读了一些关于XSLT的东西。我无法解决这个问题

我的输入是这样的

<?xml version="1.0"?>
<root>
 <line1>Hello world, XSLT is Functional programming? additional info</line1>
</root>

你好,世界,XSLT是函数式编程吗?附加信息
所需输出

<line1>Hello world, XSLT is<br/>Functional programming?<br/>additional info</line1>
helloworld,XSLT是函数式编程?
其他信息
我的情况是
的总大小,如果字符串位置为20包含空格分隔符,则需要根据最大20个字符的大小断开字符串,然后继续下一步,否则,如果字符串位置为19包含空格分隔符,则位置为19

对不起,英语很差

让我知道这可以在XSLT中完成,这里的变量是不可变的。我不能附加这些值

有什么提示吗

谢谢,
Umesha根据评论编辑

如果您有权访问XSLT2.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函数,我们选择任何匹配的子字符串,并在其后面添加一个

这个例子的结果是

<line1>Hello world, XSLT is <br/>Functional <br/>programming? <br/>additional <br/></line1>
helloworld,XSLT是功能性的
编程吗
附加

根据评论编辑

如果您有权访问XSLT2.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函数,我们选择任何匹配的子字符串,并在其后面添加一个

这个例子的结果是

<line1>Hello world, XSLT is <br/>Functional <br/>programming? <br/>additional <br/></line1>
helloworld,XSLT是功能性的
编程吗
附加

在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) &lt;= $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>




在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) &lt;= $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>




任何已知的浏览器都会自行在
中分解/填充文本。这真的是插入

的要求吗?我需要在中断后进行一些缩进,因为一些电子邮件引擎没有文本缩进负数。任何已知的浏览器都会自己在
中中断/填充文本。这真的是插入

的要求吗?我需要在中断后进行一些缩进,因为某些电子邮件引擎没有文本缩进负数。如果处理器支持禁用输出转义,则可以像插入文本一样插入标记,但这绝不是一个好的解决方案。最好使用xsl:analyze字符串并将
br
作为元素节点正确插入结果树中。@MichaelKay你说得对,我只关注子字符串的选择过程。我将anwser更改为使用分析字符串函数。如果处理器支持禁用输出转义,则可以像插入文本一样插入标记,但这从来不是一个好的解决方案。最好使用xsl:analyze字符串并将
br
作为元素节点正确插入结果树中。@MichaelKay你说得对,我只关注子字符串的选择过程。我将anwser更改为使用分析字符串函数。