たとえば、このノードに属性を追加します。
<Party>
そのため、次のようになります。
<Party role="this should be set using XPath">
属性値はXPathから取得する必要があります。
以下は動作しません:)
<Party role=<xsl:value-of select="some/xpath/path"/>>
どうやってするか?
リテラル結果要素の属性は、{}
を使用して属性値テンプレート構文をサポートします。
<Party role="{some/xpath/path}">
<xsl:template match="Party">
<Party role="{some/xpath/path}">
<xsl:apply-templates select="@* | node()"/>
</Party>
</xsl:template>
すべきです。代替として
<xsl:template match="Party">
<xsl:copy>
<xsl:attribute name="role" select="some/xpath/path"/>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
もちろん、apply-templatesが必要なのは、処理する属性ノードや子ノードがある場合のみです(たとえば、ID変換テンプレートによってコピーされる場合)。
以下のサンプルを試すことができます:
<xsl:for-each select="YOUR_SELECT_PATH">
<a>
<Party> <xsl:attribute name="role"><xsl:value-of select="@source"/></xsl:attribute> </Party>
<xsl:value-of select="."/>
</a>
</xsl:for-each>
ここでは、属性ロールをxmlノードPartyに設定しています。