现在我有 XSLT 可以按照我想要的方式转换 XML。但它的工作非常缓慢。主要问题在这里:
<xsl:key name="document" match="/coverage/module/method/seqpnt/@document" use="." />
<xsl:key name="classes" match="/coverage/module/method/@class" use="." />
<xsl:template match="/coverage[@profilerVersion='1.5.8 Beta']">
<xsl:variable name="allDocuments" select="module/method/seqpnt/@document[generate-id()
= generate-id(key('document',.)[1])]" />
<xsl:for-each select="$allDocuments">
<xsl:if test="$docUrl = .">
<xsl:variable name="docId" select="position()" />
......
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
基本上allDocuments
变量包含所有文档的列表 - 字符串列表。我想稍后将包含该文档值的输入 XML 中的属性替换为文档 ID - 此列表中的绝对位置。现在我正在遍历每条记录并检查字符串是否等于列表中的字符串,如果是 - 获取位置。有什么方法可以达到更好的性能吗?例如在变量上使用键?