5

私はXSLに非常に慣れていないので、次のコード内のselectが何を選択するかについて混乱しています。

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

<xsl:apply-templates select="*|@*"/>

何か案は?ありがとう

4

2 に答える 2

12

XPath2.0のAbbreviatedSyntaxセクションを確認してください。

この<xsl:apply-templates select="."/>例では、コンテキストアイテム.に評価されます。ほとんどの場合、これは現在処理されているノードと同じです。したがって、この例ではコンテキストノードを選択します。

この<xsl:apply-templates select="*|@*"/>例で*は、コンテキストノードのすべての子要素を選択します。@*コンテキストノードのすべての属性を選択します。ユニオン演算子|です。したがって、この例では、コンテキストノードのすべての子要素とコンテキストノードのすべての属性を選択します。

<xsl:apply-templates select="."/>コンテキストノードにさらに処理を適用するために頻繁に使用されます。

<xsl:apply-templates select="*|@*"/>現在のノードとその属性のすべての子要素を処理するために頻繁に使用されます。これは、要素の処理が完了し、その子要素/属性を適用される他のテンプレートに渡したい場合によく使用されます。

于 2012-11-26T00:38:02.437 に答える
4
<xsl:apply-templates select="."/>

現在のノードのコンテンツを処理します!ドット.はコンテンツを示します。現在のノードに子ノードがなく、代わりにデータがある場合(例:)<foo>Sample Data</foo>、パーサーはデータを処理しますSample Data

<xsl:apply-templates select="@*|*"/>

属性と子ノード、または現在のノードの下のデータを処理します。違いは..これはコンテキストノードのすべての属性を処理します。

他のテンプレートとは異なり、評価するため、のprocess代わりに単語を使用します。たとえば、以下のようなテンプレートがもう1つある場合は、上記のコードと一緒に評価します。copyapply-templatecopy-ofvalue-of

  <xsl:template match="text()[.='Sample Data']"/> 

次に、出力XMLからテキストを削除します。XSLファイルでこのテンプレートであるにもかかわらず、データcopy-of select="node_name"をコピーします。value-of select="node-name"

于 2012-11-26T05:30:53.320 に答える