我的XSLT文件中包含以下行:
<init><xsl:value-of select="fn:string-join(__something__),',')"/></init>
某些内容不是真正的内容。
目前,上面一行产生的线条超过120个字符。
<init>1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000</init>
我希望我的输出看起来如下:
<init>1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,
1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,
1000</init>
我的问题:
其中,一个不好的例子(第二个数字被分成两部分):
`<init>1000,10
00,1000,1</init>`
good example:
`<init>1000,1000,
1000,1
</init>`
答案 0 :(得分:3)
你可以沿着以下几行使用replace
函数:
<init><xsl:value-of select="replace(string-join(__something__),','),
'.{0,119}(,|$)', '$0 ')"/></init>
正则表达式.{0,119}(,|$)
将匹配尽可能多的字符,最多可以使用逗号或字符串结尾处理120个字符,替换字符串$0
将在该逗号后添加换行符(或字符串的结尾)。如果您不想在最后添加额外换行符,可以将整个内容包装在replace(..., '\n$', '')
中以再次将其删除。
答案 1 :(得分:0)
(前提:由于有人已经给出了您的确切问题的答案,我将面临一个与主题略有不同的答案的风险。)
与向元素添加缩进不同,在文本节点中间插入换行符不仅仅是一个整形操作,而是一个表示问题,仅此而已:更改节点的长度和字符串值。
如果你的输出xml又是另一个转换的输入,那xslt必须考虑添加的换行符,或字符串函数,如 tokenize ,结束, 包含等可能会产生意想不到的结果。
总之,如果您正在寻找一种方法看到您的结果行正确包装我建议使用fn:string-join(__something__),', ')
(逗号后面有空格)来连接您的值,并让您的代码编辑器根据需要包装行。
不同之处在于,这些空格在每个值之后已经统一,而不是&#34;此处和那里&#34;根据单词长度,可以很容易地考虑连续转换而不必使用正则表达式。