XSLT 在多行上拆分行的内容

XSLT split content of line over multi lines

我的 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>

我的问题:

  1. 我如何告诉 XSLT 将我的行大小限制为 120 个字符?
  2. 如何确保数字字符串不会被拆分?

其中,一个不好的例子(第二个数字被分成两部分):

`<init>1000,10
       00,1000,1</init>`

good example:

 `<init>1000,1000,
       1000,1
   </init>`

您可以按照以下方式使用 replace 函数:

<init><xsl:value-of select="replace(string-join(__something__),','),
                                    '.{0,119}(,|$)', '[=10=]&#10;')"/></init>

正则表达式 .{0,119}(,|$) 将匹配尽可能多的字符,最多 120 个以逗号或字符串结尾结束,替换字符串 [=13=]&#10; 将在后面添加换行符该逗号(或字符串的末尾)。如果你不想在最后添加额外的换行符,你可以将整个内容包装在 replace(..., '\n$', '') 中以再次将其剥离。

(前提:由于有人已经给出了您的确切问题的答案,我将冒着偏离主题的风险为稍微不同的问题提供答案)

与向元素添加缩进不同,在文本节点中间插入换行符不仅仅是一种修饰操作,只是一种表现形式而已:更改节点的长度和字符串值。

如果您的输出 xml 又是另一个转换的输入,则 xslt 必须考虑添加的换行符或字符串函数,例如 tokenizeends-withcontains 等可能会产生意想不到的结果。

总而言之,如果您正在寻找一种方法来查看正确包装的结果行,我建议使用fn:string-join(__something__),', ')(使用space 在逗号之后)连接您的值,并让您的代码编辑器根据需要换行。

不同的是,这些space是在每个值后面统一添加的,而不是按照字长"here and there",可以无需使用正则表达式即可轻松考虑连续转换。