xsl-list
[Top] [All Lists]

Re: [xsl] Assigning new attribute value

2016-12-20 14:26:16
On 20.12.2016 21:11, Mark Wilson pubs(_at_)knihtisk(_dot_)org 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>

So any attribute present gets that new, same value? Then simply do

  <xsl:template match="Location/@*">
    <xsl:param name="placement-index"/>
    <xsl:attribute name="{name()}" select="$placement-index"/>
  </xsl:template>


and have

  <xsl:template match="Location">
     <xsl:param name="placement-index"/>
     <xsl:copy>
        <xsl:apply-templates select="@*">
<xsl:with-param name="placement-index" select="$placement-index"/>
        </xsl:apply-templates>
    </xsl:copy>
  </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>