This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Using a second xml document as a lookup table


I want to output a node only if it is referenced in a second XML file.
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>

Eventually I'm going to build a SQL select statement, so I want to output:

 col2, col3

But first I'm trying to just match the values and output all of them like this:

 col1=, col2=col2, col3=col3,

Then I'll figure out how to eliminate the one that has no matching
value in the lookup document.

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>

I'm getting:

 col1=, col2=, col3=,

So my lookup is not working. Can anyone see why?
Also, is this a good way to do this kind of lookup, or is there a simpler way?
I'm using MSXML4.

Thanks,
John Sands


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]