【发布时间】:2010-08-19 14:14:20
【问题描述】:
我有一个看起来像这样的 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>
--更新-- 为了不丢失文本块前后的空格以及粗斜体标志,我们还可以检查文本前后的空格。
<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>
【问题讨论】:
-
如果您需要帮助,您需要向我们展示您的 XSLT 代码。
-
与我们分享您已经尝试过的内容?
-
text() 节点将为您提供特定元素内的文本。你试过吗?
-
这是我迄今为止所尝试的。
''':text> ''' '' '' -
请编辑您的问题并将此代码放在那里...并请格式化。谢谢。
标签: xslt text transformation matching