[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Pairing elements according to attributes with XSLT

Subject: Re: Pairing elements according to attributes with XSLT 1
From: Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx>
Date: Wed, 22 Jul 2009 10:36:37 +0200
Re:  Pairing elements according to attributes with XSLT
$ cat doit.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />

  <xsl:template match="/">
    <xsl:call-template name="doit">
      <xsl:with-param name="from" select="'big'" />
      <xsl:with-param name="to" select="'small'" />
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="doit">
    <xsl:param name="from" />
    <xsl:param name="to" />
    <MainWordInput xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:noNamespaceSchemaLocation="entriesResult.xsd"
                   fromSize="{$from}" toSize="{$to}">
      <xsl:for-each select="/KeywordsInfo/KeywordsEntry">
        <xsl:variable name="kentry" select="." />
        <xsl:for-each select="keyword[@size=$from]">
          <xsl:variable name="fromkw" select="." />>
          <xsl:for-each select="$kentry/keyword[@size=$to]">
            <Entries>
              <first><xsl:value-of select="$fromkw" /></first>
              <second><xsl:value-of select="." /></second>
            </Entries>
          </xsl:for-each>
        </xsl:for-each>
      </xsl:for-each>
    </MainWordInput>>
  </xsl:template>

</xsl:stylesheet>

$ xsltproc doit.xsl k.xml | tidy -q -xml
<?xml version="1.0"?>.
<MainWordInput
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="entriesResult.xsd" fromSize="big"
toSize="small">
  <Entries>
    <first>bowling ball</first>
    <second>tennis ball</second>
  </Entries>
  <Entries>>
    <first>bowling ball</first>>
    <second>table tennis ball</second>
  </Entries>
  <Entries>>
    <first>mountain 1</first>
    <second>chair 1</second>>
  </Entries>
  <Entries>>
    <first>mountain 1</first>
    <second>chair 2</second>>
  </Entries>
  <Entries>>
    <first>mountain 2</first>
    <second>chair 1</second>>
  </Entries>
  <Entries>>
    <first>mountain 2</first>
    <second>chair 2</second>>
  </Entries>
</MainWordInput>

$



Mit besten Gr|_en / Best wishes,

Hermann Stamm-Wilbrandt
Developer, XML Compiler
WebSphere DataPower SOA Appliances
----------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschdftsf|hrung: Erich Baier
Sitz der Gesellschaft: Bvblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294



             Andy Kohn
             <andydev@xxxxxxxx
             m>                                                         To
                                       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
             07/22/2009 08:52                                           cc
             AM
                                                                   Subject
                                        Pairing elements according to
             Please respond to         attributes with XSLT 1
             xsl-list@xxxxxxxx
              lberrytech.com








Hi all,

I'm trying to pair elements according to attributes using XSLT 1.

Giving an example would be easier to explain ;)

This is an example of the input XML:


<KeywordsInfo>
    <KeywordsEntry>
        <keyword size="big">bowling ball</keyword>
        <keyword size="medium">should not be included</keyword>
        <keyword size="small">tennis ball</keyword>
        <keyword size="small">table tennis ball</keyword>
    </KeywordsEntry>
    <KeywordsEntry>
        <keyword size="big">mountain 1</keyword>
        <keyword size="big">mountain 2</keyword>
        <keyword size="small">chair 1</keyword>
        <keyword size="small">chair 2</keyword>
    </KeywordsEntry>
    <KeywordsEntry>
        <keyword size="medium">should not be excluded at all</keyword>
        <keyword size="tiny">should not be excluded at all</keyword>
    </KeywordsEntry>
</KeywordsInfo>


I need to create an XSLT 1, that gets two parameters, fromSize and
toSize, which then creates pairs of this entries.

For example, if I send fromSize=big, toSize=small, I need to get this
result:


<MainWordInput xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="entriesResult.xsd"
            fromSize ="big"
            toSize="small">
   <Entries>
      <first>bowling ball</first>
      <second>tennis ball</second>
   </Entries>
   <Entries>
      <first>bowling ball</first>
      <second>table tennis ball</second>
   </Entries>
   <Entries>
      <first>mountain 1</first>
      <second>chair 1</second>
   </Entries>
   <Entries>
      <first>mountain 1</first>
      <second>chair 2</second>
   </Entries>
   <Entries>
      <first>mountain 2</first>
      <second>chair 1</second>
   </Entries>
   <Entries>
      <first>mountain 2</first>
      <second>chair 2</second>
   </Entries>
</MainWordInput>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.