xsl-list
[Top] [All Lists]

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

2009-04-07 12:53:39

Martin,

nice, but the Bananas are missing ...

[stammw twoFiles]$ xsltproc doit.xsl doc.xml
<?xml version="1.0"?>
<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></uicontrol>
         </p>
       </body>
    </topic>
</topic>
rh73[main]-[stammw twoFiles]$



Mit besten Grüßen / Best wishes,

Hermann Stamm-Wilbrandt
Developer, XML Compiler
WebSphere DataPower SOA Appliances
----------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschäftsführung: Erich Baier
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
----- Forwarded by Hermann Stamm-Wilbrandt/Germany/IBM on 04/07/2009 06:50
PM -----
                                                                       
             Martin Honnen                                             
             <Martin(_dot_)Honnen(_at_)gm                                       
  
             x.de>                                                      To
                                       
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
             04/07/2009 03:29                                           cc
             PM                                                        
                                                                   Subject
                                       Re: [xsl] Replacing values in the
             Please respond to         input file with values from a   
             xsl-list(_at_)lists(_dot_)mu         second file                   
  
              lberrytech.com                                           
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       




Mark Peters wrote:
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>

Here is an example stylesheet:

<xsl:stylesheet
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
   version="1.0">

   <xsl:output indent="yes"/>

   <xsl:key name="uic" match="uicontrol" use="@id"/>

   <xsl:variable name="uic-doc" select="document
('navigation-labels.xml')"/>

   <xsl:template match="uicontrol">
     <xsl:variable name="ref" select="@conref"/>
     <xsl:copy>
       <xsl:for-each select="$uic-doc">
         <xsl:value-of select="key('uic', $ref)"/>
       </xsl:for-each>
     </xsl:copy>
   </xsl:template>

   <xsl:template match="@* | node()">
     <xsl:copy>
       <xsl:apply-templates select="@* | node()"/>
     </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

--

             Martin Honnen
             http://JavaScript.FAQTs.com/:

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--