xsl-list
[Top] [All Lists]

Re: [xsl] Checking external files based on the attribute value

2008-08-13 06:38:20
This is a bit clunky but assuming your source data is in source.xml

<?xml version="1.0"?>
<doc>
 <graphic picfile="I970106058X_bulb"/>
 <graphic picfile="I970106058X_dummy"/>
</doc>

and your filelist is in filelist.xml

<?xml version="1.0"?>
<files>
 <file>./970106058X_c01_0002.tif</file>
 <file>./970106058X_c01_0001.tif</file>
 <file>./970106058X_bulb.tif</file>
 <file>./970106058X_0000.tif</file>
 <file>./970106058X_c01_0003.tif</file>
</files>

Then this seems to work.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
 <xsl:output method="xml" indent="yes"/>

 <xsl:variable name="files" select="document('filelist.xml')"/>

 <xsl:template match="/">
   <doc>
     <xsl:apply-templates/>
   </doc>
 </xsl:template>

 <xsl:template match="graphic">
<xsl:variable name="file" select="substring-after(concat(@picfile,'.tif'),'I')"/>

   <node picfile="{(_at_)picfile}">
     <xsl:attribute name="matched">
       <xsl:choose>
         <xsl:when test="$files/files/file[contains(.,$file)]">
           <xsl:value-of select="true()"/>
         </xsl:when>
         <xsl:otherwise>
           <xsl:value-of select="false()"/>
         </xsl:otherwise>
       </xsl:choose>
     </xsl:attribute>
   </node>
 </xsl:template>
</xsl:stylesheet>

peter(_at_)radish:~/xxx$ xsltproc process.xsl source.xml
<?xml version="1.0"?>
<doc>
 <node picfile="I970106058X_bulb" matched="true"/>
 <node picfile="I970106058X_dummy" matched="false"/>
</doc>
peter(_at_)radish:~/xxx$

The $files/files/file[contains(.,$file)] does not seem to want to be converted into a boolean and I couldn't construct a way of getting it to match.

There has got to be a better way!


--~------------------------------------------------------------------
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>
--~--