所以我的问题是这样的。我有一个在很多地方使用的转换文档,并且通常处理许多小型格式转换。在一种特定情况下,我需要从结果中删除空格。输出看起来像这样:
'\n 某事非常重要,带有上标注释1\n '
我尝试过以下变体:
<xsl:template match="no_whitespace">
<xsl:variable name="result">
<xsl:apply-templates/>
</xsl:variable>
<xsl:copy-of select="normalize-space($result)"/>
</xsl:template>
但子节点已从输出中删除。我必须非常小心,不要设置任何通用模板,如“text()”,因为它会干扰转换的一般处理。看来我在这里遗漏了一些明显的东西。
编辑:尝试按照 Stefan-Hegny 的建议编写身份转换。
<xsl:template match="title_full">
<xsl:apply-templates mode="stripwhitespace"/>
</xsl:template>
<xsl:template match="text()" mode="stripwhitespace">
<xsl:value-of select="normalize-space(translate(., '\n', ''))"/>
</xsl:template>
<xsl:template match="/ | @* | *" mode="stripwhitespace">
<xsl:apply-templates select="."/>
</xsl:template>
这解决了我的问题,即删除标签最高级别的空格和换行符,然后允许转换正常进行。对于这个含糊不清的问题表示歉意,并感谢您的帮助。
编辑第二个:“翻译”的使用并不像我预期的那样工作,它逐个字符地工作。我使用了替换子字符串的转换。
当你使用normalize-space
那么仅使用片段的文本值,因此子节点被剥离。你必须把normalize-space
也到子节点的模板中(那些由您应用的<xsl:apply-templates/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)