我有一个看起来像这样的 xml
<para>
text text text
<b>text</b> text text <i>text</i>
</para>
目标是将其转换为 mediaWiki 格式,使用 ''' 表示粗体等。
当我为此编写转换时,模板匹配会忽略<para>
标签内的所有文本,只有<b>
s 和<i>
s 被转换。我需要帮助。
更新:这是我迄今为止尝试过的:
这是我到目前为止所尝试的。
<xsl:template match="para">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="b">
<xsl:text>'''</xsl:text><xsl:value-of select="replace(replace(.,'\s+$',''),'^\s+','')" disable-output-escaping="no"/><xsl:text>'''</xsl:text>
</xsl:template>
<xsl:template match="i">
<xsl:text>''</xsl:text><xsl:value-of select="replace(replace(.,'\s+$',''),'^\s+','')" disable-output-escaping="no"/><xsl:text>''</xsl:text>
</xsl:template>
这是我尝试 text() 函数时使用的。
<xsl:template match="text()">
<xsl:value-of select="." disable-output-escaping="no"/>
</xsl:template>
--update-- 为了不丢失文本块前后的空格以及粗体和斜体标志,我们还可以检查文本前后的空格。
<xsl:template match="text()">
<xsl:variable name="originalText" select="."/>
<xsl:if test="starts-with($originalText,' ')">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(.)" disable-output-escaping="no"/>
<xsl:if test="ends-with($originalText,' ')">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>