xsl-list
[Top] [All Lists]

Re: [xsl] Assigning new attribute value

2016-12-20 14:25:06
Try

<Location>
  <xsl:attribute name="{name(@*[1])}" select="$placement-index"/>
</Location>

The [1] isn't necessary if you know there will always be exactly one attribute, 
but it makes it a bit more robust.

Michael Kay
Saxonica

On 20 Dec 2016, at 20:11, Mark Wilson pubs(_at_)knihtisk(_dot_)org 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

I am doing an identity transformation that has presented me with a problem. 
The element <Location> in the original XML must have one and only one of 
seven possible attributes. Whichever attribute is present, I must keep its 
name but change its value. I have created a brute-force template that I 
assume will work. It ascertains the attribute's name and assigns it a new 
value. This is so ugly I am hanging my head in shame. There must be a more 
elegant method
Mark

xsl:template match="Location">
    <xsl:param name="placement-index"/>
        <Location>
          <xsl:choose>
              <xsl:when test="@minisheet">
                  <xsl:attribute name="minisheet" select="$placement-index"/>
              </xsl:when>
              <xsl:when test="@souvenir-sheet">
                  <xsl:attribute name="souvenir-sheet" 
select="$placement-index"/>
              </xsl:when>
              <xsl:when test="@gutter">
                  <xsl:attribute name="gutter" select="$placement-index"/>
              </xsl:when>
          </xsl:choose>

<!-- There are more attribute names, but you get the idea -->

        </Location>
 </xsl:template>

--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>