0

for-each ループで xsl-varible を使用すると、通常の x-path で xml データにアクセスできません (正常にループします)。ループの外で同じデータにアクセスしようとしても問題はありません。

例:

<xsl:variable name="teams">
        <team name="Team one" cg_id="155370" homepage="http://www.teamone.com" enabled="true" />
        <team name="Team two" cg_id="430906" homepage="http://www.teamtwo.com" enabled="true" />
</xsl:variable>

<xsl:for-each select="document('')/*/xsl:variable[@name='teams']/team[@active='true']">

    <xsl:value-of select="/DATA/ITEMS/ITEM/HEADERTXT" />

</xsl:for-each>

私はsaxon-he 9.3.0.5(Kernow 1.7.2)を使用しています

ここで何が欠けていますか?

4

1 に答える 1

2

パス/は、現在のコンテキスト ノードのルート ノード (ドキュメント ノード) を選択します。プライマリ入力ドキュメントとスタイルシート ドキュメントの 2 つのドキュメントを操作し、 を使用してスタイルシート ドキュメントのノードにアクセスすると、メイン ドキュメントを外部に保存for-eachする必要があります。for-each

<xsl:variable name="primary-doc" select="/"/>

次に、 for-each 内で使用できます

<xsl:value-of select="$primary-doc/DATA/ITEMS/ITEM/HEADERTXT" />

これで、コードが意図したとおりに動作しない理由と、複数のドキュメントを操作する際の問題を解決する方法が説明されました。

ただし、ノードで変数を使用してからそれにアクセスするという全体的なアプローチはdocument('')かなり奇妙に見えます$teams。一時ドキュメントを含む変数がある場合 (XSLT 2.0 で行う)、単純に実行できます。

<xsl:for-each select="$teams/team[@active='true']">
  <xsl:value-of select="$primary-doc/DATA/ITEMS/ITEM/HEADERTXT"/>
</xsl:for-each>

もちろん、2 つのドキュメントでは、コンテキスト ノードとドキュメントを変更する for-each の外の変​​数に、既に表示されているもの以外を格納する必要があります。

于 2012-05-29T17:26:30.417 に答える