xsl-list
[Top] [All Lists]

Re: displaying sql results in dropdown menus

2004-08-19 01:55:46
Hi Matt,

// I catch the attributes' ids in xsl variables

     <xsl:variable name="idattr1" select="../../idattr[1]"/>
     <xsl:variable name="idattr2" select="../../idattr[2]"/>

The variable $idattr1 contains the <idattr> element with the value
'sql:id_collection'. Similarly, the variable $idattr2 contains the
<idattr> element with the value 'sql:libelle_collection'.

// And I try to get their values in a dropdown list

             <xsl:for-each select="sql:row">
                 <option  value= "$idattr1">
                <xsl:value-of select="$idattr2"/>
               </option>
              </xsl:for-each>

The value attribute is set to the literal string "$idattr1" (not the
value of the $idattr1 variable -- you need to use attribute value
templates for that). The value of $idattr2 is
"sql:libelle_collection".

What you're after are the values of the <id_collection> and
<libelle_collection> elements within the current <sql:row> element.
The name of the first element (for the value attribute) is held in the
$idattr1 variable, after the colon:

  substring-after($idattr1, ':')

You need to locate the child of the current <sql:row> element whose
local name is the same as this substring:

  *[local-name(.) = substring-after($idattr1, ':')]

(Namespace awareness is more fiddly; do you really need it or can you
guarantee that all the children of the <sql:row> elements are in the
SQL namespace?)

So you need:

  <xsl:for-each select="sql:row">
    <select value="{*[local-name(.) =
                      substring-after($idattr1,':')]}">
      <xsl:value-of select="*[local-name(.) =
                              substring-after($idattr2, ':')]" />
    </select>
  </xsl:for-each>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/



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