我用xf:repeat nodeset element填充一个表:
<tbody xf:repeat-nodeset="instance('table')//result">
<tr>
<td>
<xf:output value="interfaceName"></xf:output>
</td>
<td>
<xf:output value="reportDate"></xf:output>
</td>
<td>
<xf:group ref=".[testResult='success']">
<xf:output value="testResult" style="color:green;font-weight:bold"/>
</xf:group>
<xf:group ref=".[testResult='failure']">
<xf:output value="testResult" style="color:red;font-weight:bold"/>
</xf:group>
</td>
<td>
<xf:trigger appearance="minimal">
<xf:label>File link</xf:label>
<xf:action ev:event="DOMActivate">
<xf:load show="new">
<xf:resource value="fileLink"/>
</xf:load>
</xf:action>
</xf:trigger>
</td>
</tr>
</tbody>
迭代超过600个结果并填充4列需要28秒。在我看来,这是很重要的。任何人都可以建议我如何改进这个?
答案 0 :(得分:3)
在XPath表达式中使用//可能是某些XForms引擎的问题,至少对于XSLTForms,因为XForms没有指定如何定义索引来改进这一点。没有索引,所有节点都会逐个测试!
如果可能,您应该尝试使用完整路径。
答案 1 :(得分:1)
对于这样的结果的只读显示,我发现某些处理器支持的transform()
功能非常方便。写一个样式表,接受你的结果&#39;实例作为输入并生成HTML表格;我将其称为“结果到表格xsl&#39;”。然后写
<xf:output value="transform(instance('results'),
'results-to-table.xsl',
false)"
mediatype="application/xhtml+xml"/>
位于文档中的适当位置。
由于transform()
在XForms 1.1中不是标准的,因此只能在接受它作为语言扩展的处理器中使用; XSLTForms可以,但我不知道其他处理器做了什么。