-1

次のxslファイルがあります。これは、要素「id」によって2つのxmlファイルを結合します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" />

<xsl:key name="trans" match="Transaction" use="id" />

<!-- Identity template to copy everything we don't specifically override -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>

<!-- override for Mail elements -->
<xsl:template match="Mail">
<xsl:copy>
<!-- copy all children as normal -->
<xsl:apply-templates select="@*|node()" />
<xsl:variable name="myId" select="id" />
  <Transaction_data>
    <xsl:for-each select="document('transactions.xml')">
      <!-- process all transactions with the right ID -->
      <xsl:apply-templates select="key('trans', $myId)" />
    </xsl:for-each>
  </Transaction_data>
</xsl:copy>
</xsl:template>

<!-- omit the id element when copying a Transaction -->
<xsl:template match="Transaction/id" />
</xsl:stylesheet>

ここで、idをパラメーターにします。xmlファイルからパラメータを取得します。

<xsl:param name="usenode" select="*[name() = document('params.xml')/*/join_node]"/>
<xsl:key name="trans" match="Transaction" use="*[name() = document('params.xml')/*/join_node]" />

これらの行の直後にその変数の値を出力できますが、さらに、それを使用したい場合は、変数の値が消えているように見えます。ファイル全体で変数を表示するにはどうすればよいですか?

編集:

OK、私はもっと具体的に質問しようとしています。

したがって、私の目標は、「id」を使用中の属性にすることです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" />
<xsl:param name="usenode" select="*[name() = document('params.xml')/*/join_node]"/>
<xsl:key name="trans" match="Transaction" use="*[name() = document('params.xml')/*/join_node]" />

<!-- Identity template to copy everything we don't specifically override -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>

<!-- override for Mail elements -->
<xsl:template match="Mail">
<xsl:copy>
<!-- copy all children as normal -->
<xsl:apply-templates select="@*|node()" />
<xsl:variable name="myId" select="$usenode" />
<Transaction_data>
<xsl:for-each select="document('transactions.xml')">
  <!-- process all transactions with the right ID -->
  <xsl:apply-templates select="key('trans', $myId)" />
</xsl:for-each>
</Transaction_data>
</xsl:copy>
</xsl:template>

<!-- omit the id element when copying a Transaction -->
<xsl:template match="Transaction/id" />
</xsl:stylesheet>

$ usenodeを参照すると、表示されません。誰か助けてもらえますか?

4

1 に答える 1

0

xsl:param をどこに置くかは言っていません。xsl:stylesheet の子である場合、スタイルシート全体で表示されます。xsl:template の子である場合、そのテンプレート内でのみ表示されます。投稿のタイトル (テンプレート間でパラメーターを渡す) は、テンプレート パラメーター (xsl:template の子として xsl:param など) が必要であることを示唆していますが、率直に言って、達成しようとしていることをまったく明確にしていません。何を試みたか、またはどのように失敗したか。だから私は質問に反対票を投じています。

于 2012-12-20T12:03:06.477 に答える