Re: Extend XML file attributes using XSLT

"Anthony Jones" <[email protected]> Fri, 9 Nov 2007 09:49:14 -0000
Newsgroups gmane.comp.mozilla.devel.layout.xslt
Message-ID <[email protected]>
"Christian Rühl" <[email protected]> wrote in message
news:[email protected]...
> Hi folks!
>
> I have a little noob problem here with XSLT. I have a XML file that
> looks like this:
>
> <archiveFiles>
>    <module path="c:/temp/module_m17_blabla.tmp"/>
>    <module path="c:/temp/module_m34_blabla.tmp"/>
>    ...
>    <moduleAddition path="c:/temp/moduleaddition_m17.tmp"/>
>    ...
> </archiveFiles>
>
> What I want to do now is the following:
>
> 1.) Copy name part of filename in <module>
> ---------------------------------------------
> I want to copy that module name part and add it to a new attribute
> called "name". How should I do this? The name of each module comes
> right after module_ in the path-attributes.
>
> 2.) Reference additional information to these modules
> ---------------------------------------------
> Finally another attribute "addition" should be added to each <module>
> when there is a <moduleAddition> node with the same module name in its
> "path" attribute. So that the outcome of the upper XML file looks like
> this:
>
> <archiveFiles>
>    <module name ="m17" path="c:/temp/module_m17_blabla.tmp"
> additon="c:/temp/moduleaddition_m17.tmp"/>
>    <module name ="m34" path="c:/temp/module_m34_blabla.tmp"/>
>    ...
> </archiveFiles>
>
> I really hope you can help me. I never worked with XSLT before and I
> couldn't find the right hints and/or tutorials yet. :(
>
> Thanks a lot in advance!
>


<?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:key name="additions" match="moduleAddition"
use="substring-before(substring-after(@path, 'moduleaddition_'), '.tmp')" />

 <xsl:template match="/archiveFiles">
   <archiveFiles>
   <xsl:for-each select="module">
    <xsl:variable name="name"
select="substring-before(substring-after(@path, 'module_'), '_')" />
    <xsl:variable name="addition" select="key('additions', $name)" />
    <module name="{$name}" path="{@path}">
     <xsl:if test="$addition">
      <xsl:attribute name="addition"><xsl:value-of select="$addition/@path"
/></xsl:attribute>
     </xsl:if>
    </module>
   </xsl:for-each>
   </archiveFiles>
 </xsl:template>

</xsl:stylesheet>


-- 
Anthony Jones - MVP ASP/ASP.NET

_______________________________________________
dev-tech-xslt mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-xslt