私は XSLT を初めて使用し、処理中のノードではなく、テンプレートで作成しているノードに正しい言葉遣いを使用しているかどうかわかりません。「現在のテンプレート ノード」とはa
、このブロックのことを意味します。
<xsl:template match="item">
<li>
<a href="{location}">
<xsl:value-of select="title" />
</a>
</li>
</xsl:template>
に適用したい別のテンプレート マッチがありますa
。
<xsl:template match="a" mode="html">
<a href="{@href}" title="this{@title}">
<xsl:if test="number(substring(@href,1,4)='http')">
<xsl:attribute name="class">external</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</a>
</xsl:template>
私の質問は次のとおりです。このa
テンプレートをテンプレートでa
作成しているに適用することは可能item
ですか、それともコンテキストノードに対してのみこのように一致していますか? (また、将来の検索のために、この種のノードを何と呼びますか?)
読んでくれてありがとう。
編集:私のユースケースを求める@Jim Garrisonへの応答として、上記の例はそれほど遠くありません。含める必要がある唯一の追加情報は、作業中のノード セットです。次のようになります。
<related-links>
<title>Link text</title>
<location>http://link-address.whatever</location>
</related-links>
私が持っているa
テンプレートは、HTMLとして処理しているノードに配置されたすべてのリンクに「外部」クラスを適用するために使用されます。related-links
この特別なテンプレートに再利用したいと思います。現在私が考えられる唯一のことは、次のようなものです。
<xsl:template match="item">
<li>
<a href="{location}">
<xsl:if test="number(substring(location,1,4)='http')">
<xsl:attribute name="class">external</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
<xsl:value-of select="title" />
</a>
</li>
</xsl:template>
特にこれがまさに始まりであり、さらに複雑になると確信していることを考えると、これは不必要に繰り返されるように思えます。これは珍しいことではありません...私が使用すべき他のアプローチはありますか?
PS - libxslt に依存する Symphony CMS を使用しているため、XSLT 2.0 はありません