XSLT分割多行的内容

时间:2015-01-22 09:17:41

标签: xml xslt

我的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. 我怎样才能确保数字字符串不会被分割?
  3. 其中,一个不好的例子(第二个数字被分成两部分):

    `<init>1000,10
           00,1000,1</init>`
    
    good example:
    
     `<init>1000,1000,
           1000,1
       </init>`
    

2 个答案:

答案 0 :(得分:3)

你可以沿着以下几行使用replace函数:

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

正则表达式.{0,119}(,|$)将匹配尽可能多的字符,最多可以使用逗号或字符串结尾处理120个字符,替换字符串$0&#10;将在该逗号后添加换行符(或字符串的结尾)。如果您不想在最后添加额外换行符,可以将整个内容包装在replace(..., '\n$', '')中以再次将其删除。

答案 1 :(得分:0)

(前提:由于有人已经给出了您的确切问题的答案,我将面临一个与主题略有不同的答案的风险。)

与向元素添加缩进不同,在文本节点中间插入换行符不仅仅是一个整形操作,而是一个表示问题,仅此而已:更改节点的长度和字符串值。

如果你的输出xml又是另一个转换的输入,那xslt必须考虑添加的换行符,或字符串函数,如 tokenize 结束包含等可能会产生意想不到的结果。

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

不同之处在于,这些空格在每个值之后已经统一,而不是&#34;此处和那里&#34;根据单词长度,可以很容易地考虑连续转换而不必使用正则表达式。