如何在XSLT中消除导出非空HTTP链接时输出的换行符?
解决XSLT导出HTTP链接时的换行问题
当然可以直接在XSLT里搞定这个问题!不用再依赖Linux工具事后清理换行啦,我给你几个实用的方案:
1. 用normalize-space()清理元素内容里的换行
这是最常用的处理方式,它会自动去掉字符串首尾的空白,同时把中间的连续空白(包括换行、制表符、多个空格)替换成单个空格,完美适配清理链接里的换行需求。
比如你的模板里原本输出链接的代码是:
<xsl:value-of select="your-link-element"/>
改成这样就行:
<xsl:value-of select="normalize-space(your-link-element)"/>
如果你的需求是完全去掉所有空白(包括中间的空格),可以用translate()函数精准替换换行符:
<xsl:value-of select="translate(your-link-element, ' ', '')"/>
是换行符, 是回车符,这样就能把所有换行/回车都清空。
2. 关闭XSLT输出的自动缩进
很多时候换行是XSLT处理器自动添加的缩进导致的,你可以通过xsl:output标签禁用缩进:
<xsl:output method="text" indent="no"/>
如果你输出的是HTML或XML,把method改成对应的值就行(比如method="html"),同样设置indent="no",处理器就不会自动插入多余的换行和空格了。
3. 控制模板内部的空白
有时候模板代码里的换行和空格也会被输出到结果里,这时候可以用<xsl:text>来精确控制输出内容,避免不必要的空白。比如:
<xsl:template match="link-node"> <xsl:text>https://your-domain.com/</xsl:text> <xsl:value-of select="normalize-space(.)"/> </xsl:template>
把需要输出的固定文本用<xsl:text>包裹,模板里的其他空白就不会被输出了。
举个完整的例子
假设你的XML是这样的:
<resources> <resource> <url> https://example.com/my awesome/resource </url> </resource> </resources>
对应的XSLT可以这么写:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no"/> <xsl:template match="/"> <!-- 清理链接里的换行,输出干净的HTTP链接 --> <xsl:value-of select="normalize-space(resources/resource/url)"/> </xsl:template> </xsl:stylesheet>
输出结果就是:https://example.com/my awesome/resource,完全没有换行。
如果用XSLT 2.0及以上,还可以用replace()函数更灵活处理,比如只去掉换行保留空格:
<xsl:value-of select="replace(resources/resource/url, '[\r\n]', '')"/>
这些方法组合起来,就能彻底解决输出里的换行问题,直接在XSLT环节就得到干净的HTTP链接啦!
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

