【发布时间】:2011-01-14 21:43:31
【问题描述】:
给定以下 XML:
<table>
<col width="12pt"/>
<col width="24pt"/>
<col width="12pt"/>
<col width="48pt"/>
</table>
如何将宽度属性转换为可用于数学表达式的数值?到目前为止,我已经使用substring-before 来执行此操作。下面是一个示例模板(仅限 XSLT 2.0),它显示了如何对这些值求和:
<xsl:template match="table">
<xsl:text>Col sum: </xsl:text>
<xsl:value-of select="sum(
for $w
in col/@width
return number(substring-before($w, 'pt'))
)"/>
</xsl:template>
现在我的问题:
- 有没有比
substring-before更有效的转换方式? - 如果我不知道数字后面的文字怎么办?不使用正则表达式有什么办法吗?
【问题讨论】:
-
感谢您的所有回答。为了确定哪个答案最符合我的标准,我创建了一个基准:一个包含 10000 列的表,使用 -repeat 选项在 saxon 中运行样式表 1000 次,并记下转换的平均执行时间。结果如下:AakashM 解决方案是最快的(110 毫秒),但需要事先知道属性中的所有字符。我的解决方案(substring-before)在效率类别(115ms)中排名第二。当文本未知时,Dimitre 的解决方案(125ms)比使用正则表达式(130ms)更快。
-
这些数字也表明这不是优化样式表的正确位置:)
标签: xslt string types type-conversion