-1

こんにちは、アンカー タグを作成するための以下の xslt があります。

    <xsl:template match="para/text()">

<xsl:variable name="numx">
<xsl:number format="1" level="any"/>
</xsl:variable>
<xsl:choose>
    <xsl:when test="(contains(substring(substring-after(current(),'.'),4,1),')')  or contains(substring(substring-after(current(),'.'),4,1),'.') or contains(substring(substring-after(current(),'.'),4,1),' ')) and (contains(substring (current(),string-length(substring-before(current(), '.')) -1,2),' ')) and contains(substring(current(),string-length(substring-before(current(), '.')) -2,1),$numx)">


<xsl:variable name="before">
<xsl:value-of select="normalize-space(substring(current(),string-length(substring-before(current(), '.')) -1,2))"/>
</xsl:variable>

<xsl:variable name="NewN">
    <xsl:value-of select="concat('0',$before)"/>
</xsl:variable>
<xsl:variable name="after">
<xsl:value-of select="substring(substring-after(current(),'.'),1,3)"/>
</xsl:variable>

<xsl:variable name="befdNumb">
<xsl:value-of select="substring-before(current(),$before)"/>
</xsl:variable>



<xsl:variable name="aftdNumb">
<xsl:value-of select="substring-after(current(),$after)"></xsl:value-of>
</xsl:variable>


    <xsl:value-of select="$befdNumb"/>
<xsl:text> </xsl:text>
    <a href="{concat('er:#CLI_CH_',$NewN,'/','P',normalize-space($before),'-',$after)}">

        <xsl:value-of select="concat(normalize-space($before),'.',$after)"/>
    </a>    
       <xsl:value-of select="$aftdNumb"/>
    </xsl:when>



    <xsl:when test="(contains(substring(substring-after(current(),'.'),4,1),')')  or contains(substring(substring-after(current(),'.'),4,1),'.') or contains(substring(substring-after(current(),'.'),4,1),' ')) and contains(substring (current(),string-length(substring-before(current(), '.')) -2,1),' ')">
<xsl:variable name="before">
<xsl:value-of select="substring(current(),string-length(substring-before(current(), '.')) -2,3)"/>
</xsl:variable>

<xsl:variable name="NewN">
    <xsl:value-of select="$before"/>
</xsl:variable>
<xsl:variable name="after">
<xsl:value-of select="substring(substring-after(current(),'.'),1,3)"/>
</xsl:variable>

<xsl:variable name="befdNumb">
<xsl:value-of select="substring-before(current(),$before)"/>
</xsl:variable>



<xsl:variable name="aftdNumb">
<xsl:value-of select="substring-after(current(),$after)"></xsl:value-of>
</xsl:variable>

<xsl:value-of select="$befdNumb"/>
        <xsl:text> </xsl:text>
    <a href="{concat('er:#CLI_CH_',$NewN,'/','P',normalize-space($before),'-',$after)}">

        <xsl:value-of select="concat(normalize-space($before),'.',$after)"/>
    </a>

    <xsl:value-of select="$aftdNumb"/>
    </xsl:when>
    <xsl:otherwise>
    <xsl:value-of select="."/>
    </xsl:otherwise>
</xsl:choose>
</xsl:template> 

しかし、この xslt が適用されています。つまり、テキストが以下のような場合、アンカー タグが作成されています (テキスト全体に '.' しかありません)。

以下の段落 12.012 で説明する手段の 1 つにより、債権者が署名した請求書を会社に送達する

しかし、私はそれが下のテキストにも適用されることを望みます

<para>the major issues here concern the notion of principal and ancillary jurisdictions, the ideal being that the ancillary jurisdiction will defer to the principal jurisdiction on most important matters, with a view to bringing about a just, practical and economically rational winding-up of affairs. A relatively recent development in connection with that ideal concerns the judicial promotion of court-endorsed agreements known as "crossborder protocols" between liquidators and similar officers appointed in different jurisdictions. It is important in this context, however, not to lose sight of the fact that certain matters of "administration" always remain governed by Hong Kong law. See paragraphs 12.016 to 12.032 below.</para>

どうすればいいのか教えてください。この番号を er:#CLI_CH_12/P12-016 および er:#CLI_CH_12/P12-032 に変換する必要があります

ありがとう

4

1 に答える 1

1

これにドットを付けるより良い方法があると確信していますが、この xslt が何をすべきかが完全に明確ではないため、私はあなたのソリューションにとどまります。

再帰的なテンプレート呼び出しをいくつか行う必要があります。 現在の「para/text()」テンプレートを、テキストをパラメーターとして持つ名前付きテンプレートに変更します。ただし、すべての current() を $text に置き換えます

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


<xsl:variable name="numx">
    <xsl:number format="1" level="any"/>
</xsl:variable>
    <xsl:choose>
                <xsl:when test="(contains(substring(substring-after($text,'.'),4,1),')') 
                          or     contains(substring(substring-after($text,'.'),4,1),'.')
                          or     contains(substring(substring-after($text,'.'),4,1),' ')) 
                          and (contains(substring ($text,string-length(substring-before($text, '.')) -1,2),' '))
                          and contains(substring($text,string-length(substring-before($text, '.')) -2,1),$numx)">

....

</xsl:template>

現在の text() で名前付きテンプレートを呼び出す新しいテンプレートを追加します。

<xsl:template match="para/text()">
    <xsl:call-template name="mytext" >
        <xsl:with-param  name="text" select="." />
    </xsl:call-template>
</xsl:template>

whenの直前にを追加して、otherwise処理されないドットの前にテキストを出力し、このドットの後ろにあるテキストで名前付きテンプレートを呼び出します。

<xsl:when test="contains(substring-after($text,'.'),'.')">
    <xsl:value-of select="substring-before($text,'.')"/>
    <xsl:text>.</xsl:text>
    <xsl:call-template name="mytext">
        <xsl:with-param  name="text" select="substring-after($text,'.')"/>
    </xsl:call-template>
</xsl:when>
<xsl:otherwise>
    <xsl:value-of select="$text"/>
</xsl:otherwise>
于 2013-04-29T13:28:24.370 に答える