xsl-list
[Top] [All Lists]

RE: [xsl] favor certain elements

2009-10-20 00:59:05
Hello,

Have you tried grouping? Using this template:

<xsl:template match="/root">
  <root>
    <elementx>
      <xsl:for-each-group select="*/*" group-by="local-name()">
        <xsl:choose>
          <xsl:when test="local-name()='a'">
            <xsl:copy-of select="current-group()[1]"/>
            </xsl:when>
          <xsl:when test="local-name()='b'">
            <xsl:copy-of select="current-group()[last()]"/>
            </xsl:when>
          <xsl:otherwise>
            <!-- some default rule should go here -->
            <xsl:copy-of select="current-group()[1]"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each-group>
      </elementx>
    </root>
  </xsl:template>

this source:

<root>
   <element1>
       <a>first a (from 1)</a>
       <b>first b (from 1)</b>
   </element1>
   <element2>
       <a>second a (from 2)</a>
       <b>second b (from 2)</b>
       <c>first c (from 2)</c>
   </element2>
   <element3>
       <a>third a (from 3)</a>
       <b>third b (from 3)</b>
       <c>second c (from 3)</c>
   </element3>
</root>

gives this result:

<root>
   <elementx>
      <a>first a (from 1)</a>
      <b>third b (from 3)</b>
      <c>first c (from 2)</c>
   </elementx>
</root>

Regards,
EB


-----Original Message-----
From: Szabo, Patrick (LNG-VIE) 
[mailto:patrick(_dot_)szabo(_at_)lexisnexis(_dot_)at]
Sent: Monday, October 19, 2009 4:08 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] favor certain elements


Hi, 
 
Im using Saxon 9, and XSLT 2.0.
 
Source:
 
<root>
    <element1>
        <a>...</a>
        <b>...</b>
    </element1>
    <element2>
        <a>...</a> 
        <b>...</b>
        <c>...</c>
    </element2>
</root>
 
desired output:
 
<root>
    <elementx>
        <a>...</a> 
        <b>...</b>
        <c>...</c>
    </elementx>
</root>
 
What i want do do is to apply templates to the elements a, b, c.
The problem is that there is an element a in element1 and another 
in element2. (same thing with element b)
Is there a way to favor certain elements ?!
If there is an element a in element1 and element2 i want to use 
the a from element2 - if there isnt i want to use the a from element1.
I want to to the same thing with b but contrariwisely.
 
What i want is something like. 
 
<xsl:apply-templates select="//a" fav="parent::element2"/>
 
I hope i explained the question sufficiently !
 
regards  
 

Patrick Szabo
 XSLT-Entwickler 

Tel.: +43 (1) 534 52 - 1573 
Fax: +43 (1) 534 52 - 146 

Patrick(_dot_)Szabo(_at_)lexisnexis(_dot_)at

LexisNexis Verlag ARD Orac GmbH & Co KG
Marxergasse 25, 1030 Wien
FN 8333f, Handelsgericht Wien
http://www.lexisnexis.at/
 




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

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