xsl-list
[Top] [All Lists]

Re: [xsl] How to properly use Key elements

2013-10-16 00:46:58
Hello,

I don't understand what keys are supposed to achieve in this case?

The following solution produces the desired output without keys:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/table">
  <xsl:apply-templates/>
  </xsl:template>

<xsl:template match="*">
  <xsl:apply-templates/>
  </xsl:template>

<xsl:template match="thead|text()"/>

<xsl:template match="tr[1]">
  <!-- beware, the ship name should be a valid element name (no
spaces, etc.) -->
  <xsl:variable name="shipName" select="td[1]"/>
  <xsl:element name="{$shipName}">
    <xsl:apply-templates select="following-sibling::tr" mode="port"/>
    </xsl:element>
  </xsl:template>

<xsl:template match="tr" mode="port">
  <xsl:variable name="numRows" select="count(td)"/>
  <xsl:for-each select="td[$numRows - 1]">
    <port name="{.}">
      <xsl:value-of select="following-sibling::td[1]"/>
        </port>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

This may be the solution you're refering to in your last paragraph,
and maybe the input is really more complex than the example given; but
if the structure is similar, this should be fast enough even on a long
input file...?

Regards,
EB

On Wed, Oct 16, 2013 at 1:35 AM, G. T. Stresen-Reuter
<tedmasterweb(_at_)gmail(_dot_)com> wrote:

--~------------------------------------------------------------------
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>
--~--