3

私は電話することを望んでいました..

<xsl:call-template name="widow-fix">
  <with-param name="text" select="text"></with-param>
</xsl:call-template>

そして、テキストの最後を探して、ファイナライズされたときspaceにそれを置き換えます。#160;


サポートできるはず

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>

答える/証明するなど、別の文字を使用してください。#テストしたときの結果は

Lorem ipsum dolor sit amet, consectetur adipiscing#elit.

<p>Lorem ipsum dolor sit amet, consectetur adipiscing#elit.</p>
4

2 に答える 2

4

必要なのは、すべてのテキスト ノードの最後のスペースを置き換えることだけです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="p | text()">
    <xsl:apply-templates select="." mode="widow-fix"/>
</xsl:template>


<xsl:template match="* | @*">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>


<xsl:template match="* | @*" mode="widow-fix">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" mode="widow-fix"/>
    </xsl:copy>
</xsl:template>


<xsl:template match="text()[contains(., ' ')]" mode="widow-fix">
    <xsl:call-template name="text">
        <xsl:with-param name="text" select="."/>
    </xsl:call-template>
</xsl:template>


<xsl:template name="text">
    <xsl:param name="text"/>

    <xsl:variable name="substring-before" select="substring-before($text, ' ')"/>
    <xsl:variable name="substring-after"  select="substring-after($text, ' ')"/>

    <xsl:choose>
        <xsl:when test="contains($substring-after, ' ')">
            <xsl:value-of select="$substring-before"/>
            <xsl:text> </xsl:text>

            <xsl:call-template name="text">
                <xsl:with-param name="text" select="$substring-after"/>
            </xsl:call-template>
        </xsl:when>

        <xsl:otherwise>
            <xsl:value-of select="$substring-before"/>
            <!--<xsl:text>&#160;</xsl:text>-->
            <xsl:text>#</xsl:text>
            <xsl:value-of select="$substring-after"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>


</xsl:stylesheet>

mode="widow-fix" は、囲みタグを保持したまま、テキスト ノードと段落の両方を処理できます。

そのようなドキュメントをテストソースとして使用しました

<book>
<p>Highly random content</p>
in this book
</book>

これは次のように変換されます

<book>
<p>Highly random#content</p>
in this#book
</book>
于 2013-11-05T16:43:13.807 に答える
0

「select=text()」が必要で、xs: 文字列関数のいずれかで置き換えることができますが、結果が未亡人を防ぐとは言いません。

于 2013-10-30T22:22:29.983 に答える