[xsl] Re: Processing an element only if there are no better optio ns

Subject: [xsl] Re: Processing an element only if there are no better optio ns
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Thu, 22 May 2003 07:14:36 +0200
Use:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:output omit-xml-declaration="yes"/>

  <xsl:param name="pPrefs">
    <pref>Media Release</pref>
    <pref>Assessment</pref>
    <pref>Reaction</pref>
    <pref>Citation</pref>
  </xsl:param>

  <xsl:variable name="vPrefs"
  select="document('')/*/xsl:param[@name='pPrefs']"/>

  <xsl:template match="ProductGroup">
    <xsl:for-each select="Product">
      <xsl:sort select="count($vPrefs/pref[current()/@Type =
.]/preceding-sibling::*)"
                data-type="number"/>
      <xsl:if test="position() = 1">
        <xsl:copy-of select="."/>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

When this is applied on the following source.xml:

<ProductGroup>
  <Product Type="Assessment">Some Assessment</Product>
  <Product Type="Reaction">Some Reaction</Product>
  <Product Type="Media Release">Some Media Release</Product>
</ProductGroup>

the wanted result is produced:

<Product Type="Media Release">Some Media Release</Product>


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

"Dustin, Dave" <Dave.Dustin@xxxxxxxxxx> wrote in message
news:2124ED9D3EF87D40B223B489CC93A94D9CC554@xxxxxxxxxxxxxxxxxxxxx
> Thanks Juergen,
>
> Problem is that Type1 is not what the actual value is.  The possible
values
> are (in the order of preference)
>
> Media Release
> Assessment
> Reaction
> Citation
>
> Problem is, the system that generates the XML will spit these out in a
> random order, so I can't rely on the one I want to appear first, nor can I
> sort them due to the text order.
>
>
> Dave
>
>
> -----Original Message-----
> From: Zink, Juergen [mailto:Juergen.Zink@xxxxxxxxxxxxxxxxxxxx]
> Sent: Thursday, 22 May 2003 4:09 p.m.
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: AW: [xsl] Processing an element only if there are no better optio
> ns
> Importance: Low
>
>
> Hi Dave,
>
> <snip>
>
> ><ProductGroup>
> > <Product Type="Type1">[...]</Product>
> > <Product Type="Type2">[...]</Product>
> > <Product Type="Type3">[...]</Product>
> ></ProductGroup>
> >
> >What I need to do is only extract the contents of _1_ Product in an
> >order
> of
> >preference.
> >
> >i.e. If there is a Type1 product, then don't output Type2 or Type3.
> >However, if there is no Type1, then output Type2, but not Type3 if it's
> >present.
>
> Inside a template use: select="/ProductGroup/Product[1]".
> Selecting the first product in document order.
>
> Please,
>
> Juergen
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread