XSLT中xsl:value-of未处理换行符与回车符的问题
无需修改现有XSL代码实现换行的解决方案
最直接且不用改动XSL代码的办法是通过CSS样式来处理文本换行——毕竟你的问题核心是浏览器默认会忽略文本里的换行符,把所有内容挤成一段。
给你现有的.reportFieldData类添加以下CSS规则:
.reportFieldData { white-space: pre-line; }
为什么这个方法能解决问题?
white-space: pre-line的特性完美匹配你的需求:
- 它会识别文本中的所有换行符(
\r\n、\n、\r),并将其转换为浏览器能识别的换行显示 - 自动合并连续的空白字符(比如多个空格),同时保留段落之间的空行
- 文本会自适应容器宽度自动换行,不会像
pre属性那样强制内容不换行
你之前替换方法失效的原因
当你尝试把换行符替换成<br/>或 时,由于使用的是<xsl:value-of>,它默认会对输出的HTML标签进行转义,导致<br/>被显示成<br/>而非实际的换行元素。如果要让替换生效,你需要改用<xsl:copy-of>并配合disable-output-escaping,但这就需要修改XSL代码,不符合你的要求。
备选方案(若CSS不可用)
如果因为环境限制无法添加CSS,还有一种间接思路:在生成XML数据源时提前把换行符替换为<br/>,然后在XSL中用<xsl:copy-of>替代<xsl:value-of>——但这需要修改数据源或XSL代码,不如CSS方案便捷。
内容的提问来源于stack exchange,提问作者MattyMerrix
相关产品推荐
相关产品推荐

