1

と に関して一般的な質問が<xsl:template match="">あり<xsl:apply-templates/>ます。

要素に一致する場合がありますE1EDP01。ただし、すべてのE1EDP01要素が一致する必要はなく、特定の範囲のみが一致する必要があります。

しかし、特定の範囲の要素のみを一致させる正しい方法は何ですか?

このようにするのは正しいですか:

<xsl:apply-templates select="E1EDP01"/>

の範囲を制限するテンプレートE1EDP01:

<xsl:template match="E1EDP01[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]">
...
</xsl:template>

または、apply-templates を次のように変更する必要がありますか?

<xsl:apply-templates select="E1EDP01[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]"/>
4

2 に答える 2

4

どちらも機能しますが、意図は少し異なります。特定の一致するテンプレートには、「これが常にこの種の E1EDP01要素を処理する方法です」と記載されており、<xsl:apply-templates select="E1EDP01"/>「すべてのE1EDP01要素を今すぐ処理する」と記載されています。ジェネリックテンプレートと特定の適用があると、「これらの特定 E1EDP01の要素を今すぐ処理したい(ただし、後で他の要素を処理したい)」と「これが任意の要素を処理する方法です」と言いますE1EDP01

どちらのアプローチが優れているかは[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]、要素の処理方法に固有のものなのか、スタイルシートの特定の場所で実行したいものに固有のものなのかによって異なります。たとえば、金融取引を説明するXMLがあり、負の金額は常に赤いボックスに表示する必要があるというルールがある場合、次のように定義できます。

<xsl:template match="amount[. &lt; 0]">
  <redbox><xsl:value-of select="."/></redbox>
</xsl:template>
<xsl:template match="amount"><xsl:value-of select="."/></xsl:template>

代わりに、すべての負の金額を含む要約レッドボックスを含めたいが、通常は他の場所に金額を表示したい場合は、おそらく単一のテンプレートを使用することを選択しますが、その時点amountでフィルタリングしますapply-templates

<redbox>
  <xsl:apply-templates select="amount[. &lt; 0]" />
</redbox>

タスクに最も適したアプローチを選択する必要があります。

于 2013-02-19T13:15:04.120 に答える
1

目的に合わせて両方が機能する場合は、XSLT に最も適した方を選択してください。

于 2013-02-19T12:54:37.030 に答える