如何用XSLT将连续多空格替换为<text:s>标签生成ODS文件?
使用XSLT处理ODS生成中的连续空格替换问题
完全可以实现这个需求,核心思路是利用XSLT的字符串分析功能,匹配连续2个及以上的空格序列,将其替换为对应数量的<text:s>标签,单个空格则保持原样。
核心XSLT代码实现
<xsl:template match="cell"> <text:p> <xsl:analyze-string select="." regex="\s{2,}"> <!-- 输出未匹配到连续空格的文本(含单个空格) --> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> <!-- 处理连续空格序列,生成对应数量的text:s标签 --> <xsl:matching-substring> <text:s text:c="{string-length(.)}"/> </xsl:matching-substring> </xsl:analyze-string> </text:p> </xsl:template>
代码说明
<xsl:analyze-string>:通过正则\s{2,}匹配2个及以上的连续空白字符,若需仅匹配空格(排除制表符、换行等),可将\s替换为。<xsl:matching-substring>:获取匹配到的连续空格长度,生成带text:c属性的<text:s>标签,属性值为空格数量。<xsl:non-matching-substring>:直接输出非连续空格的文本内容,包括单个空格。
示例验证
输入XML:
<cell>CCC GR</cell> <cell>Olol lo</cell>
输出结果:
<text:p>CCC<text:s text:c="3"/>GR</text:p> <text:p>Olol lo</text:p>
内容的提问来源于stack exchange,提问作者single_t0n
相关产品推荐
相关产品推荐

