xsl-list
[Top] [All Lists]

Re: Avoid repitition of XML data at different nodes??

2002-10-16 12:33:38
It's a simple grouping problem:

Muenchian Grouping: http://www.jenitennison.com/xslt/grouping/muenchian.xml

<xsl:key name="params" match="Parameter" use="Name"/>

<xsl:for-each select="Class/Parameter">
  <xsl:choose>
    <xsl:when test="generate-id() = generate-id(key('params', Name))">
      Absent:  <xsl:value-of select="Name"/>!
    </xsl:when>
    <xsl:otherwise>
      Present!
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each>

contains() and concat() are string functions and can't be used to compare different nodes. Furthermore it looks like you want to reassign the variable $total. That's not possible in XSLT.

Instead of Muenchian Grouping you can use the preceding axis.

Regards,

Joerg

Raghava Rao wrote:
Hello,
 Any help is appreciated...
Please find enclosed the xsl file which looks up the given input XML file to produce the html output file. I want to know how to avoid repitition of Parameter P1 in my output html file. I'm not sure how to use the "concat" and "contains" functions and couldn't find help on the web regarding the same.. I'm using Saxon6_5_2, if that helps! I would appreciate if you can throw some light!
 Thank you.
     Raghava

Input XML file:
--------------------
<Parent>
 <Class>
   <Parameter Name="P1" Type="str" />
   <Parameter Name="P2" Type="int" />
 </Class>
 <Class>
   <Parameter Name="P3" Type="long" />
   <Parameter Name="P1" Type="str" />
 </Class>
</Parent>

XSL file:
------------
<xsl:variable name="total" > </xsl:variable>
Parameters are: <br/>
<xsl:for-each select="Parent">
 <xsl:for-each select="Class/Parameter">
     <xsl:variable name="pNam" select="@Name" />
     <xsl:choose>
       <xsl:when test="contains($total,$pNam)" >
          Present!
       </xsl:when>
       <xsl:otherwise>
          Absent:
<xsl:value-of name="$total" select="concat($total, '_', $pNam, '_')" /> <br/>
      <xsl:value-of select="@Name" /> <br/>
       </xsl:otherwise>
     </xsl:choose>
 </xsl:for-each>
</xsl:for-each>

Output html file:
-------------------
Parameters are:
Absent: P1
Absent: P2
Absent: P3
Present!


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



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