私は XSLT が初めてで、次の for-each ステートメントで速度の問題がいくつかあります。これを最適化する方法について、誰かが私にいくつかの指針を教えてくれることを望んでいましたか?
以下の for-each は、約 4MB の XML をループしています。各ホテル ノードに説明と目的地があることを確認するためのテストです。また、各ホテルの評価が 2 より大きいが 6 ではないこともテストしています。XML の評価の可能な値は、0、1、2、3、4、5、または 6 です。理想的には、評価のみを選択したいと思います。 3、4、または 5 を選択し、その他は無視します。
<for-each select="response/results/hotel[
not(@description = '') and
@rating > '2' and
not(@rating = '6') and
not(@destination = '') ]">
<call-template name="hotelparams"/>
<call-template name="upropdata"/>
<call-template name="request"/>
<call-template name="Newline"/>
</for-each>
リクエストに応じて、以下で呼び出されるテンプレートを追加しました。出力は、mySQL にインポートされるタブ区切りのテキスト ファイルを作成しています。ところで、upropdata テンプレートは無視してください。まもなく削除されます...
<xsl:template name="hotelparams">
<xsl:value-of select="@itemcode"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@cheapestcurrency"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@cheapestprice"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@checkin"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@checkout"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@description"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@destair"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@destination"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@destinationid"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@engine"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@hotelname"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@image"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@nights"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@rating"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@resultkey"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@resultno"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@supplierdestination"/><xsl:value-of select="$tab"/>
<xsl:value-of select="@type"/></xsl:template>
<xsl:template name="upropdata">
<xsl:value-of select="$tab"/>\N<xsl:value-of select="$tab"/>\N<xsl:value-of select="$tab"/>\N<xsl:value-of select="$tab"/>\N<xsl:value-of select="$tab"/>\N<xsl:value-of select="$tab"/>2011-01-01</xsl:template>
<xsl:template name="request">
<xsl:for-each select="/response/request/method"><xsl:value-of select="$tab"/><xsl:value-of select="./@sessionkey"/></xsl:for-each></xsl:template>
<xsl:template name="Newline">
<xsl:text> </xsl:text></xsl:template>