2

ID に参加する必要がある XML があります

XML 入力 (93 Mb)

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <Partner>
      <ID>186561</ID>
   </Partner>
   ...
<root>

XML : fuzzymatched.xml (40 Mb)

<?xml version="1.0" standalone="yes"?>
<root>
   <Partner>
    <ID>186561</ID>
    <FUZZYMATCH>71</FUZZYMATCH>
  </Partner>
  ...
<root>

このファイルを次の XSLT で結合すると、非常に遅くなります。毎回大きなドキュメントを開くようです?! より良い解決策はありますか?または私は何か間違ったことをしていますか。Talend Open Studio の XSLT エンジンを使用しています

XSLT ファイル

<!-- ********************************************* -->
<!-- fuzzymatch_joiner.xsl : -->
<!-- ********************************************* -->
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />

<xsl:variable name="vPartners" select="document('file:///c:/temp/fuzzymatched.xml')/root" />

<xsl:template match="root">
    <xsl:copy>
          <xsl:apply-templates select="Partner"></xsl:apply-templates>          
        </xsl:copy>
</xsl:template>
<!-- ********************************************* -->

<xsl:template match="Partner">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"></xsl:apply-templates>
        <xsl:copy-of select="$vPartners/Partner[ID = current()/ID]/FUZZYMATCH"/>
    </xsl:copy>
</xsl:template>
<!-- ********************************************* -->

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
</xsl:template>
<!-- ********************************************* -->

 </xsl:stylesheet>
4

2 に答える 2

2

まず、ID ルックアップを高速化するために、必ずキー (<xsl:key>およびkey()) を使用して fuzzymatched.xml から ID をインデックス化する必要があります。それは大きな違いを生むはずです。

それだけでは不十分な場合...私はTalendについてあまり知りませんが、Saxonなどの優れた最適化されたXSLTプロセッサを使用して同じ変換を試み、パフォーマンスがどのように比較されるかを確認します. document()XSLT プロセッサは、毎回参照されるファイルを再度開く必要はありません。

Talend内で別のプロセッサーを自由に使用できますか?

XSLT 3.0 (まだワーキング ドラフト ステータス) は、ストリーミングのサポートを提供します。これにより、入力 XML のメモリ要件が軽減され、速度が向上する可能性があります。サクソンはそれをサポートしています。

しかし、使用するだけkey()で物事が大幅に高速化されるはずです。

于 2013-11-08T16:32:51.823 に答える