2013-04-29 4 views
-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 ниже, требование подписывается кредитором

, но я хочу, о применяться для текста ниже также

<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> 

пожалуйста дайте мне знать, как я это делаю. Мне нужно, чтобы преобразовать это число, как эр: # CLI_CH_12/P12-016 и эр: # CLI_CH_12/P12-032

Благодаря

+0

Можно ли показать свой текущий XML, который вы используете, и объяснить логику трансформации? Благодаря! –

+0

Привет @TimC, я обновил свой запрос и сожалею о том, что я не могу показать весь свой XML-документ, поскольку он очень большой. – Marsoni

ответ

1

Я совершенно уверен, что может быть лучше точка, но из-за него не совсем понятно, что должен сделать этот xslt, я остаюсь с вашим решением.

Вам нужно сделать несколько рекурсивных вызовов шаблонов. Измените текущий шаблон para/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> 

Добавить новый шаблон для вызова по имени одного с текущим текстом().

<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> 
+0

hI @ hr_117 это работает, но только для первого числа (см. Параграфы 12.016 - 12.032 ниже «здесь он работает только для 12.016), но не для второго номера. – Marsoni

+0

Чтобы сделать эту работу, добавьте рекурсивный вызов оригиналу, когда его детали. Замените '' с ' ' –

+0

спасибо, очень большой босс, это работает. Г-н. еще раз спасибо :-) – Marsoni

Смежные вопросы