使Xpath选择属性的一部分

时间:2013-09-19 06:39:42

标签: xpath tablelayout

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

首先,我想知道,究竟是什么。从未遇到过它。谷歌没有产生任何有用的结果。

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

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

问题是每个表都不同,其中很多都有rowpans和colspans,因为我使用Apache FOP并且它不支持表格布局自动,我的表只有width =“100%”,没有指定了列宽,因此某些列比它们应该更宽。

感谢您的帮助和建议!

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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]