Re: [xsl] Using a second xml document as a lookup table

Subject: Re: [xsl] Using a second xml document as a lookup table
From: Joerg Heinicke <joerg.heinicke@xxxxxx>
Date: Fri, 10 May 2002 01:21:25 +0200
Hello John,

almost everything is ok, you are switching the context correctly to the second file dbdef.xml, you are only selecting the text-value of a node, that has no text.
With your <xsl:value-of select="$dbdef-col"/> at the end you select the text of an element <AttributeType/>, they all are empty (have no child nodes) in your dbdef.xml. What you want is maybe <xsl:value-of select="$dbdef-col/@name"/>, isn't it?
But your code is not completely full of sense to me. Can the test not be done easier?


<xsl:template match="columns">
  <xsl:for-each select="column">
    <xsl:variable name="dbcolumn" select="@dbcolumn"/>
    <xsl:for-each select="$dbdef">
      <xsl:if test="key('dbdef-cols', $dbcolumn)">
        <xsl:value-of select="$dbcolumn"/>
        <xsl:text>=</xsl:text>
        <xsl:value-of select="$dbcolumn"/>
        <xsl:text>,</xsl:text>
      </xsl:if>
    </xsl:for-each>
  </xsl:for-each>
</xsl:template>

You have something like ID and IDREF. You don't need to output as first the one and as second the other one. The value is the same. So the <xsl:if> is important. Or do you need the "col1=,col2=col2,col3=col3"-String?

Regards,

Joerg

Here's my main XML file:

  <columns>
        <column dbcolumn="col1"/>
        <column dbcolumn="col2" />
        <column dbcolumn="col3" />
  </columns>

Here's my lookup XML file, dbdef.xml:

  <ElementType>
                <AttributeType name='col2'/>
                <AttributeType name='col3' />
                <AttributeType name='col4' />
  </ElementType>
>
My XSLT is:

 <xsl:key name="dbdef-cols" match="AttributeType" use="@name" />
 <xsl:variable name="dbdef" select="document('dbdef.xml')" />

 <xsl:template match="/">
    <xsl:variable name="all-columns" select="//column"/>
    <xsl:for-each select="$all-columns">
       <xsl:variable name="dbcolumn" select="@dbcolumn" />
       <xsl:for-each select="$dbdef">
          <xsl:variable name="dbdef-col" select="key('dbdef-cols', $dbcolumn)" />
          <xsl:value-of select="$dbcolumn"/>=<xsl:value-of select="$dbdef-col"/>,
       </xsl:for-each>
     </xsl:for-each>
 </xsl:template>



XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



Current Thread