如何使用XSLT将XML中的换行符转换为空格
当然可行!这是XSLT处理文本节点时非常常见的需求,我给你两种实用的解决方案,你可以根据自己的具体需求来选择:
解决方案1:使用
normalize-space()函数统一空白格式 这个函数会自动把文本中的所有空白字符(包括换行符、制表符、连续空格)压缩成单个空格,同时去除文本首尾的空白。非常适合希望统一文本空白风格的场景,一步到位解决换行拼接问题。
示例XSLT模板:
<xsl:template match="para"> <p> <xsl:value-of select="normalize-space(.)"/> </p> </xsl:template>
拿你的示例XML来说:
<para> This is a text with random breaklines </para>
经过转换后会得到干净的HTML:
<p>This is a text with random breaklines</p>
解决方案2:精准替换换行符为空格(保留原有空格)
如果你只想处理换行符,不想改变原有的连续空格或者其他空白格式,可以用replace()函数(XSLT 2.0及以上版本支持)来精准匹配并替换换行符:
示例XSLT模板:
<xsl:template match="para"> <p> <xsl:value-of select="replace(., ' | ', ' ')"/> </p> </xsl:template>
这里 是换行符(LF), 是回车符(CR),用正则表达式匹配这两种常见的换行格式,统一替换成单个空格。
如果你的运行环境只支持XSLT 1.0,可以用translate()函数替代(它只能逐个字符替换,所以需要把两种换行符分别对应成空格):
<xsl:template match="para"> <p> <xsl:value-of select="translate(., ' ', ' ')"/> </p> </xsl:template>
这里把CR和LF两个字符分别替换成空格,注意第二个参数的每个字符对应第三个参数的位置,所以用两个空格来匹配两个换行符类型。
如果替换后出现了连续的空格,你可以再额外结合normalize-space()做二次处理;如果不需要压缩空格,直接保留替换后的结果即可。
内容的提问来源于stack exchange,提问作者Haezer
相关产品推荐
相关产品推荐

