xsl-list
[Top] [All Lists]

Re: [xsl] Re: Defining a Variable that depends on an unknown number of conditions

2009-01-01 20:40:57
OK.  I'm trying to determine if element_x or element_y contain the
value value_m or value_n.
I believe I'm close, but can't figure out what to replace ____________ with.
I tried current()/../@on and ./../@on but no luck.

Thanks.  Below is a quick mock-up of files.

I have xml_a.xml as so:
<xml_a>
 <depends>
   <depend on="element_x" equals="value_m|value_n"/>
   <depend on="element_y" equals="value_m|value_n"/>
 </depends>
</xml_a>

and xml_b.xml:
<xml_b>
 <element_x>value_m</element_x>
 <element_y>value_p</element_y>
</xml_b>

finally transform.xsl, that opens xml_b.xml and transforms xml_a.xml.
<xsl:variable name="xml_b" select="document('xml_b.xml')/xml_b"/>
<xml:template select="xml_a">
 <xsl:variable name="my_test" select =
"depends/depend/@equals[contains(.,$xml_b/*[name()=__________])]"/>
</xml:template>

I solved my problem using a recursive template.

<xsl:variable name="xml_b" select="document('xml_b.xml')/xml_b"/>

<xsl:template name="loop">
  <xsl:param name="loop_variable">1</xsl:param>
  <xsl:parram name="attr_on">
    <xsl:value-of select="depends/depend[position()=$loop_variable]/@on"/>
  </xsl:param>
  <xsl:param name="attr_equals">
    <xsl:value-of select="depends/depend[position()=$loop_variable]/@equals"/>
  </xsl:param>

  <xsl:choose>
    <xsl:when test="$attr_on = ''">yes</xsl:when>
      <xsl:when test="$xml_b/*[name()=$attr_on] = ''">
        <xsl:call-template name="depends">
          <xsl:with-param name="loop_variable" select="$loop_variable + 1"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:when test="contains($attr_equals,
$xml_b/*[name()=$attr_on])">no</xsl:when>
          <xsl:otherwise>
            <xsl:call-template name="depends">
         <xsl:with-param name="loop_variable" select="$loop_variable + 1"/>
      </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template select="xml_a">
  <xsl:variable name="my_test">
    <xsl:call-template name="loop"/>
  </xsl:variable>
</xsl:template>

-- 
Andrew Ferk

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