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]

Re: Using a second xml document as a lookup table


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


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