xsl-list
[Top] [All Lists]

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

2003-05-21 22:14:36
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[(_at_)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(_dot_)Dustin(_at_)adis(_dot_)co(_dot_)nz> wrote in message
news:2124ED9D3EF87D40B223B489CC93A94D9CC554(_at_)aionex1(_dot_)adis(_dot_)co(_dot_)nz(_dot_)(_dot_)(_dot_)
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(_dot_)Zink(_at_)wuerttembergische(_dot_)de]
Sent: Thursday, 22 May 2003 4:09 p.m.
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'
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



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