web-dev-qa-db-ja.com

XSLTを使用してXMLに属性を設定する方法は?

たとえば、このノードに属性を追加します。

<Party>

そのため、次のようになります。

<Party role="this should be set using XPath">

属性値はXPathから取得する必要があります。

以下は動作しません:)

<Party role=<xsl:value-of select="some/xpath/path"/>>

どうやってするか?

24
VextoR

リテラル結果要素の属性は、{}を使用して属性値テンプレート構文をサポートします。

<Party role="{some/xpath/path}">
38
Ian Roberts
<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変換テンプレートによってコピーされる場合)。

11
Martin Honnen

以下のサンプルを試すことができます:

<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に設定しています。

6
Shanjee