現在、XML を希望どおりに変換する XSLT があります。しかし、それは非常に遅いです。主な問題は次のとおりです。
<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 (このリストの絶対位置) に置き換えたいと考えています。現在、各レコードをループして、文字列がリスト内の文字列と等しいかどうかを確認し、そうであれば位置を取得します。より良いパフォーマンスを達成する方法はありますか? たとえば、変数にキーを使用するには?