Как установить атрибут в XML с помощью XSLT?

Например, я хочу добавить атрибут к этому node:

<Party>

Итак, это будет выглядеть так:

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

Значение атрибута должно появиться из XPath.

Следующие действия не будут выполняться:)

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

Как это сделать?

Ответы

Ответ 1

Атрибуты литеральных элементов результата поддерживают синтаксис шаблона значения атрибута, используя {}:

<Party role="{some/xpath/path}">

Ответ 2

<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>

Конечно, шаблоны применяются только в том случае, если есть атрибуты и/или дочерние узлы, которые вы также хотите обрабатывать (например, для копирования шаблоном преобразования идентификатора).

Ответ 3

вы можете попробовать образец ниже:

<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 node Party.