RE: [xsl] Comparison Table for XML files

Subject: RE: [xsl] Comparison Table for XML files
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 14 Jun 2007 09:27:18 +0100
In 2.0 it's basically

<xsl:for-each select="distinct-values($files/nodes/node/name)">
  <xsl:variable name="name" select="."/>
  <row>
    <xsl:for-each select="$files">
      <column>
        <xsl:value-of select="(nodes/node[name=$name]/value, 'NA')[1]"/>
      </column>
    </xsl:for-each>
  </row>
</xsl:for-each>

adapted of course to your precise input structure, plus a little code to add
row and column headers.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Dan Johnson [mailto:siliconice@xxxxxxxxx] 
> Sent: 14 June 2007 03:11
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Comparison Table for XML files
> 
> I need to generate a comparison table of several XML data files.
> 
> Each data file contains various nodes with "names" and 
> "values". Some nodes exist on one file and not in others. No 
> one file is guaranteed to have all possible node "names".
> 
> I would like to generate a table (using XSLT) as follows:
> 
> The left column will be the "name" - all names from the input 
> files need to be listed in this column. Each file will have a 
> corresponding labeled column in the table, and the value of 
> each "name" node will be placed in the correct spot in the 
> grid. If a particular file does not have a "name" node for 
> some name, a filler will be inserted ("N/A" or
> something) instead of a value. This may not show up, but for example:
>      (f1)   (f2)   (f3)
> A   NA    2     3
> B   1     NA    NA
> C   1      2      NA
> 
> A real-world example of such a table is a product feature 
> comparison chart for various products.
> 
> It's a very simple concept, but not so simple to implement it seems.

Current Thread