我有一個節點XSLT - 提取括號
<example>
Test1 (10) test2 (20) ...
</example>
內的字符串,我需要這種轉換爲:
<example>
Test1 <number>10</number> test2 <number>(20)</number>
</example>
因此我需要一個函數,將提取所有的文本(和)遞歸地。壞消息是我需要它在XSLT 1.0版中。
我有一個節點XSLT - 提取括號
<example>
Test1 (10) test2 (20) ...
</example>
內的字符串,我需要這種轉換爲:
<example>
Test1 <number>10</number> test2 <number>(20)</number>
</example>
因此我需要一個函數,將提取所有的文本(和)遞歸地。壞消息是我需要它在XSLT 1.0版中。
您可以使用按名稱調用的遞歸模板,如下所示。請注意,如果遞歸深度過高,則遞歸模板可能會有問題。如果您的輸入文本包含幾千個parens,則XSLT處理器可能會因堆棧溢出而崩潰。這些錯誤非常難以調試。如果你只處理少量的parens,那麼遞歸的方法應該沒問題。
另請注意,我的示例不處理嵌套parens。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="example">
<xsl:copy>
<xsl:call-template name="convert-parens">
<xsl:with-param name="string" select="."/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="convert-parens">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, '(')">
<xsl:variable name="after" select="substring-after($string, '(')"/>
<xsl:choose>
<xsl:when test="contains($after, ')')">
<xsl:value-of select="substring-before($string, '(')"/>
<number>
<xsl:value-of select="substring-before($after, ')')"/>
</number>
<xsl:call-template name="convert-parens">
<xsl:with-param name="string" select="substring-after($after, ')')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
用正則表達式一個xsl:analyze-string,代碼可以更簡單:
<xsl:template match="example">
<element>
<xsl:analyze-string select="text()" regex="[(][0-9][0-9][)]">
<xsl:matching-substring>
<number>
<xsl:value-of select="substring(.,2,2)"/>
</number>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</element>
</xsl:template>
這個問題被標記爲XSLT 1.0,並且OP明確表示「*壞消息是我需要它在XSLT 1.0版本中。*」。您的答案需要XSLT 2.0。 –
是的,它沒有在XSLT 1.0中實現..讀取太快請求時出錯 –
在你的輸出,10已經失去了周圍的支架,而20仍然有他們。這是爲什麼? –