XSL:在任意位置截断字符串
XSL: chop off string at arbitrary place
我正在使用 XSL 来获得 XML 样式。 xsl 定义了一个包含两列的 table。感谢 Kevin Brown,以下代码可以很好地在单词边界处截断,但我需要的是在任意位置截断。
<fo:table-cell>
<fo:block-container overflow="hidden" height="15pt"><fo:block>this is a very, very, very long text here</fo:block></fo:block-container>
</fo:table-cell>
如果您从 XML 和 XSL 生成它,您通常会在输出该特定内容时创建一个模板并放置 实体(零宽度中断 space 字符)。所以不管你怎么做,把内容做成这样(这说 "very long word" 字母之间的那个实体:
very long word
所以在你的例子中(我只把它们放在休息点附近所以你可以看到):
<fo:table-cell border="1pt solid silver">
<fo:block-container overflow="hidden" height="15pt"><fo:block>this is a very, very, very l​o​n​g t​e​x​t here</fo:block></fo:block-container>
</fo:table-cell>
你现在会得到这个(它在 "long" 中的 "o" 处中断):
如果您愿意,一个非常有趣的效果是将 "text-align" 设置为 fo:block 上的 "justify" 如果在块的末尾,您实际上会对齐所有内容插入了足够长度的 fo:leader 来填充单元格。注意:这在 Apache FOP 中不起作用,但在 RenderX XEP 中起作用。
喜欢:
<fo:table-cell border="1pt solid silver">
<fo:block-container overflow="hidden" height="15pt"><fo:block text-align="justify">this is a<fo:leader leader-length.minimum="3in"/></fo:block></fo:block-container>
</fo:table-cell>
如果你这样做,你会得到这个:
我正在使用 XSL 来获得 XML 样式。 xsl 定义了一个包含两列的 table。感谢 Kevin Brown,以下代码可以很好地在单词边界处截断,但我需要的是在任意位置截断。
<fo:table-cell>
<fo:block-container overflow="hidden" height="15pt"><fo:block>this is a very, very, very long text here</fo:block></fo:block-container>
</fo:table-cell>
如果您从 XML 和 XSL 生成它,您通常会在输出该特定内容时创建一个模板并放置 实体(零宽度中断 space 字符)。所以不管你怎么做,把内容做成这样(这说 "very long word" 字母之间的那个实体:
very long word
所以在你的例子中(我只把它们放在休息点附近所以你可以看到):
<fo:table-cell border="1pt solid silver">
<fo:block-container overflow="hidden" height="15pt"><fo:block>this is a very, very, very l​o​n​g t​e​x​t here</fo:block></fo:block-container>
</fo:table-cell>
你现在会得到这个(它在 "long" 中的 "o" 处中断):
如果您愿意,一个非常有趣的效果是将 "text-align" 设置为 fo:block 上的 "justify" 如果在块的末尾,您实际上会对齐所有内容插入了足够长度的 fo:leader 来填充单元格。注意:这在 Apache FOP 中不起作用,但在 RenderX XEP 中起作用。
喜欢:
<fo:table-cell border="1pt solid silver">
<fo:block-container overflow="hidden" height="15pt"><fo:block text-align="justify">this is a<fo:leader leader-length.minimum="3in"/></fo:block></fo:block-container>
</fo:table-cell>
如果你这样做,你会得到这个: