我有带表的xml文档。每个表都有一个属性hdsl-percent。
首先,我想知道,究竟是什么。从未遇到过它。谷歌没有产生任何有用的结果。
现在,此属性包含以百分比表示的表格列的宽度,例如hsdl-percent =“23.5 36.7 39.7”。
有什么方法可以让XPath将这些值用于表格列的宽度?因此第一列的宽度为23.5%,依此类推......
问题是每个表都不同,其中很多都有rowpans和colspans,因为我使用Apache FOP并且它不支持表格布局自动,我的表只有width =“100%”,没有指定了列宽,因此某些列比它们应该更宽。
感谢您的帮助和建议!
答案 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]