Если у вас большой блок «xsl: выбрать», в котором мне нужно установить несколько определенных наборов атрибутов для разных элементов.
Я действительно не люблю повторять определение наборов атрибутов внутри каждой ветви «выбора».
Поэтому я хотел бы работать с переменной, которая содержит эти атрибуты.
Намного проще в обслуживании и меньше места для ошибок ...
До сих пор я не смог вызвать узел атрибута?
Я думал, что это просто набор узлов, поэтому copy-of сделает свое дело.
Но это ничего не дает мне на выходе.
Это потому, что атрибутивные узлы на самом деле не дочерние?
Но XSLT 1.O не позволяет мне обращаться к ним напрямую ... <xsl:copy-of select="$attributes_body/@*/>
возвращает ошибку
Вот фрагмент таблицы стилей (сокращено от оригинала)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="list">
<xsl:for-each select="figure">
<xsl:variable name="attributes_body">
<xsl:attribute name="chapter"><xsl:value-of select="@chapter"/></xsl:attribute>
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:variable>
<xsl:variable name="attributes_other">
<xsl:attribute name="chapter"><xsl:value-of select="@book"/></xsl:attribute>
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:variable>
<xsl:choose>
<xsl:when test="ancestor::body">
<xsl:element name="entry">
<xsl:copy-of select="$attributes_body"/>
<xsl:text>Body fig</xsl:text>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="entry">
<xsl:copy-of select="$attributes_other"/>
<xsl:text>other fig</xsl:text>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
Если это невозможно сделать в XLST 1.0, сможет ли 2.0 это сделать?