xsl-list
[Top] [All Lists]

Re: [xsl] Need help with XSL and XPath

2006-05-22 23:03:54
Here's one way to do it:

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

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

  <xsl:template match="/">
    <out>
      <xsl:for-each select="data/element[not(number = following::number)]">
        <xsl:sort select="number"/>
        <xsl:variable name="this-number" select="number"/>
        <entry number="{$this-number}">
          <xsl:copy-of select="/data/element[number = $this-number]/name"/>
        </entry>
      </xsl:for-each>
    </out>
  </xsl:template>

</xsl:stylesheet>

I tested against the following data with Saxon and Xalan:

<data>
  <element>
    <name>Oscar</name>
    <number>1</number>
  </element>
  <element>
    <name>Mike</name>
    <number>1</number>
  </element>
  <element>
    <name>Bob</name>
    <number>2</number>
  </element>
  <element>
    <name>George</name>
    <number>2</number>
  </element>
  <element>
    <name>Tom</name>
    <number>3</number>
  </element>
  <element>
    <name>Dick</name>
    <number>3</number>
  </element>
  <element>
    <name>Harry</name>
    <number>3</number>
  </element>
</data>

It produced the following output:

<?xml version="1.0" encoding="UTF-8"?>
<out>
  <entry number="1">
    <name>Oscar</name>
    <name>Mike</name>
  </entry>
  <entry number="2">
    <name>Bob</name>
    <name>George</name>
  </entry>
  <entry number="3">
    <name>Tom</name>
    <name>Dick</name>
    <name>Harry</name>
  </entry>
</out>

I'm sure other ways exist.

Jay Bryant
Bryant Communication Services

----- Original Message ----- 
From: "Lassi Seppälä" <lsseppal(_at_)cc(_dot_)hut(_dot_)fi>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Monday, May 22, 2006 5:48 PM
Subject: [xsl] Need help with XSL and XPath


Here's a simplified description of my problem:

I've got an XML document with multiple entries of <element> as shown
below. The <name>s are unique, but the <number> can be same for
mulpitle entries of <element>. The XML document isn't sorted in anyway.

<element>
<name>name</name>
<number>1</number>
</element>

Now I need the XSL stylesheet to print out something like this:

number 1
name1
name4
name7

number 25
name2
name3

number 100
name5
name6

So each "number X" is only printed once and then all the <element>s
that have the number X in the <number> tags are printed below that.
Then the next biggest number is printed and so on.

Any advice?

--
Lassi






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