|
Subject: [xsl] Getting variable yet most immediate parentNode From: Steve <subsume@xxxxxxxxx> Date: Thu, 27 Sep 2007 14:55:15 -0400 |
XML=
The general gist of the below application is to output a survey and
all its questions, and give the user the appropriate options
(answers).
Problem: given the variable relationship between the <answer> nodes
being matched and their parent <section>, how to reliably amtch the
correct section @name?
<root>
<section key="A" name="Survey 1">
<answers>
<options />
</answers>
<questions>
<answers />
<question>
<answer>
<option>True</option>
<option>False</option>
</answer>
</question>
</questions>
</section>
</root>
XSL
<xsl:template match="section">
<fieldset class="oneCol" id="{@key}">
<legend><span><xsl:value-of select="@name" /></span></legend>
<xsl:apply-templates select="questions" />
</fieldset>
</xsl:template>
<xsl:template match="questions">
<xsl:apply-templates mode="q" select="option" />
<xsl:if test="following-sibling::questions">
<hr />
</xsl:if>
</xsl:template>
<xsl:template match="option" mode="q">
<div>
<span class="two">
<label>
<xsl:choose>
<xsl:when test="@name">
<xsl:value-of select="@name"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="." /></xsl:otherwise>
</xsl:choose>
</label>
</span>
<xsl:choose>
<xsl:when test="answers">
<xsl:apply-templates select="answers">
<xsl:with-param name="qKey" select="@key" />
</xsl:apply-templates>
</xsl:when>
<xsl:when test="../answers">
<xsl:apply-templates select="../answers">
<xsl:with-param name="qKey" select="@key" />
</xsl:apply-templates>
</xsl:when>
<xsl:when test="../../answers">
<xsl:apply-templates select="../../answers" >
<xsl:with-param name="qKey" select="@key" />
</xsl:apply-templates>
</xsl:when>
<xsl:when test="../../../answers">
<xsl:apply-templates select="../../../answers" >
<xsl:with-param name="qKey" select="@key" />
</xsl:apply-templates>
</xsl:when>
</xsl:choose>
</div>
</xsl:template>
<xsl:template match="answers">
<xsl:param name="qKey" />
<xsl:if test="option">
<select>
<option>Select one</option>
<xsl:for-each select="option">
<option>
<!-- [[ Need help below]] -->
<xsl:if test="$R[section=current()/*/section/@key and
questionKey=$qKey and (value=current()/@name or value=current()/.)]">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="@name">
<xsl:value-of select="@name"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="." /></xsl:otherwise>
</xsl:choose>
</option>
</xsl:for-each>
</select>
<span class="print">
<xsl:value-of select="$R[section=current()/*/section/@key and
question=$qKey and value=current()/@name or
value=current()/.]/value"/>
</span>
</xsl:if>
</xsl:template>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] RE: visual XSL, Philip Fearon | Thread | Re: [xsl] Getting variable yet most, Abel Braaksma |
| Re: [xsl] normalize-space and seque, Wendell Piez | Date | [xsl] XSL generating PHP/MySQL, Riku Riikonen |
| Month |