0

我有带有表格的 xml 文档。每个表都有一个属性 hdsl-percent。

首先,我想知道,那到底是什么。从来没有遇到过。谷歌没有产生任何有用的结果。

现在,此属性包含以百分比表示的表格列的宽度,例如 hsdl-percent="23.5 36.7 39.7"。

有什么方法可以让 XPath 将这些值用于表列的宽度?所以第一列的宽度为 23.5%,依此类推......

问题是每个表都是不同的,其中许多具有行跨度和列跨度,并且由于我使用的是 Apache FOP 并且它不支持自动表布局,所以我的表只有宽度 =“100%”,没有列宽指定,因此某些列比应有的更宽。

感谢您的帮助和建议!

4

2 回答 2

1

仅供参考:我明白了。我设法将 FOP 与 Saxon9he 合并,因此能够使用 XPath 2.0 和 XSLT 2.0。我是这样解决的:

<xsl:for-each select="tokenize(@hsdl-percent,'\s+')">
<fo:table-column column-width="{concat(.,'%')}" />
</xsl:for-each>
于 2013-11-04T11:14:04.350 回答
0

XPath 1.0对字符串操作的支持相当有限,所以拆分起来相当烦人。使用substring($string, $start[, $length]),substring-before($string, $needle)substring-after($string, $needle):

substring(...)如果字符串是固定长度的(例如,没有4.2出现只有三个字符的长度),那就没问题了:

substring(//@hsdl-percent, 1, 4)
substring(//@hsdl-percent, 6, 4)
substring(//@hsdl-percent, 11, 4)

如果长度可以改变,则需要在空格字符处拆分:

substring-before(//@hsdl-percent, ' ')
substring-before(substring-after(//@hsdl-percent, ' '), ' ')
substring-after(substring-after(//@hsdl-percent, ' '), ' ')

如果您支持XPath 2.0(或更好),请使用tokenize($string, $needle)

tokenize(//@hsdl-percent, ' ') (: returns sequence of individual values :)
tokenize(//@hsdl-percent, ' ')[1]
tokenize(//@hsdl-percent, ' ')[2]
tokenize(//@hsdl-percent, ' ')[3]
于 2013-09-19T08:20:58.057 回答