RE: [xsl] Replacing values in the input file with values from a second file

Subject: RE: [xsl] Replacing values in the input file with values from a second file
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 7 Apr 2009 14:36:59 +0100
Replace

<xsl:value-of
select="document('navigation-labels.xml')/topic/body/p/uicontrol[document('n
avigation-labels.xml')/topic/body/p/uicontrol
= .]"/>

by

<xsl:value-of
select="document('navigation-labels.xml')/topic/body/p/uicontrol[@id =
current()/@conref]"/>

Quite how you expected this to work when your code references neither the
@id nor @conref attributes defeats me.

It would be more efficient, and perhaps clearer, to use a key - but get it
working first.

Michael Kay
http:/www.saxonica.com/ 

> -----Original Message-----
> From: Mark Peters [mailto:flickrmeister@xxxxxxxxx] 
> Sent: 07 April 2009 14:15
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Replacing values in the input file with values 
> from a second file
> 
> Hi Everyone,
> 
> I have a seemingly simple transformation project, but there 
> is a piece of the puzzle that I'm missing. Maybe the solution 
> isn't so simple, after all. :-)
> 
> 
> Here is my input file.
> 
> <topic id="A">
>    <title>Menus</title>
>    <topic id="AB">
>       <title>Menu AB Details</title>
>       <body>
>          <p id="AB1">
>             <uicontrol conref="AB1a"/>
>          </p>
>          <p id="AB2">
>             <uicontrol conref="AB2a"/>
> 	    <uicontrol conref="AB2b"/>
>          </p>
>        </body>
>     </topic>
> </topic>
> 
> For each uicontrol element, I'd like to substitute the 
> element value in a second file, whose id attribute value 
> corresponds to the conref value in the first file.
> 
> Here is the second file (navigation-labels.xml):
> 
> <topic id ="navigation-labels">
>    <title>Navigation Labels</title>
>    <body>
>       <p><uicontrol id="AB1a">Oranges</uicontrol></p>
>       <p><uicontrol id="AB2a">Apples</uicontrol></p>
>       <p><uicontrol id="AB3b">Bananas</uicontrol></p>
>    </body>
> </topic>
> 
> 
> Here is the output I'm trying to produce:
> 
> <topic id="A">
>    <title>Menus</title>
>    <topic id="AB">
>       <title>Menu AB Details</title>
>       <body>
>          <p id="AB1">
>             <uicontrol>Oranges</uicontrol>
>          </p>
>          <p id="AB2">
>             <uicontrol>Apples</uicontrol>
> 	    <uicontrol>Bananas</uicontrol>
>          </p>
>        </body>
>     </topic>
> </topic>
> 
> 
> I've tried if statements and choose statements. Here is my 
> current transformation.
> 
> <xsl:stylesheet 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
> 	<xsl:output method="xml"/>
> 
> 	<xsl:template match="node()|@*">
> 		<xsl:copy>
> 			<xsl:apply-templates select="@*"/>
> 			<xsl:apply-templates/>
> 		</xsl:copy>
> 	</xsl:template>
> 	<xsl:template match="uicontrol">
> 		<uicontrol>
> 			<xsl:value-of
> select="document('navigation-labels.xml')/topic/body/p/uicontr
> ol[document('navigation-labels.xml')/topic/body/p/uicontrol
> = .]"/>
> 		</uicontrol>
> 	</xsl:template>
> </xsl:stylesheet>
> 
> 
> And here is the current output. For each uicontrol element, 
> the transformation is substituting the first uicontrol 
> element value in the navigation-labels.xml file, rather than 
> the value from the corresponding uicontrol element.
> 
> <topic id="A">
>    <title>Menus</title>
>    <topic id="AB">
>       <title>Menu AB Details</title>
>       <body>
>          <p id="AB1">
>             <uicontrol>Oranges</uicontrol>
>          </p>
>          <p id="AB2">
>             <uicontrol>Oranges</uicontrol>
> 	    <uicontrol>Oranges</uicontrol>
>          </p>
>        </body>
>     </topic>
> </topic>
> 
> 
> Thanks in advance for any help!
> 
> Mark
> 
> -- 
> 
> Mark Peters
> Senior Technical Writer
> Saba Software

Current Thread