xf:重复节点集性能不佳

时间:2016-06-28 08:27:13

标签: xquery xforms

我用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秒。在我看来,这是很重要的。任何人都可以建议我如何改进这个?

2 个答案:

答案 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可以,但我不知道其他处理器做了什么。