xsl-list
[Top] [All Lists]

Re: using xsl to substitute synonyms or translate

2003-01-07 14:23:38
Sorry to answer my own question. If I had thought about it longer I would have realized the answer. The whole xsl is below (untested). But I will walk through the steps in case this is helpful to anyone. I use an include document, e.g.,

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

and then creating a key on that document, e.g.,

<xsl:key name="nameNumKey" match="nflTeamNames/name" use="@nameId"/>

where 'nameId' would be a new attribute, e.g.,
<nflName nameId='49ers'>
 <alias>San Francisco</alias>
</nflName>


Then I do a match and a for-each, e.g.,

<xsl:template match="names">
<xsl:for-each select="$nameLookupDoc">
  <xsl:value-of select="key('nameNumKey',.)/alias"/>
</xsl:for-each>
</xsl:template>

So the whole thing looks like this:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; >
        <xsl:output method="html"/>
<xsl:variable name="nameLookupDoc" select="document('/stage4/includes/names.xml')"/>
        <xsl:key name="nameNumKey" match="name" use="@nameId"/>
        <xsl:template match="/">
                <xsl:apply-templates/>
        </xsl:template>
        <xsl:template match="nflTeamNames"/>
        <xsl:template match="names">
                <xsl:variable 
name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
                <xsl:variable 
name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
                        <xsl:for-each select="$nameLookupDoc">
                                <xsl:value-of 
select="translate(key('nameNumKey',.)/alias"/>
                        </xsl:for-each>
        </xsl:template>
</xsl:stylesheet>



From: "Thomas McDonald" <tomandlis(_at_)hotmail(_dot_)com>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] using xsl to substitute synonyms or translate Date: Tue, 07 Jan 2003 15:36:22 -0500

I have a problem that I think is similar to translating words in one language to words in another language and I was wondering if I could use xsl to do it.

I know what my source input will be (example below) and I know what I want to output to be, but I can't fathom how to build an xsl to get the output. I thought I could use the translate function, but there would be a long list of things to translate. There are 32 teams and I want to use this process again (on something unrelated) for a list of over 300 items.

Here is what my source document will look like

<nflTeamNames>
  <name>49ers</name>
  <name>Cowboys</name>
  .
  .
  .
  <name>Seahawks</name>
<nflTeamNames>

Here is what I want the output to look like:

<nflCities>
  <city>San Francisco</city>
  <city>Dallas</city>
  .
  .
  .
  <city>Seattle</city>
</nflCities>

In case you don't know American football the 49ers are the San Francisco team, the Cowboys are the Dallas team and so on. :-)

Regards,

Tom






_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE* http://join.msn.com/?page=features/junkmail


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


_________________________________________________________________
MSN 8 with e-mail virus protection service: 2 months FREE* http://join.msn.com/?page=features/virus


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



<Prev in Thread] Current Thread [Next in Thread>