|
Subject: Re: [xsl] Adding elements to unknown tree structure From: "Joris Gillis" <roac@xxxxxxxxxx> Date: Wed, 21 Sep 2005 22:06:05 +0200 |
Given:
<myxmlfile> <folder name="root"> <folder name="documents"> <document name="passwords"> 123456 </document> </folder> <folder name="pictures"> <folder name="family" /> </folder> </folder> </myxmlfile>
parameter: folder_name = "friends" parameter: path2folder = root/pictures
How can I create a new folder element named "friends" in the pictures element?
Keep in mind that I need to make sure that both "root" and "pictures" exist and if they don't, create them first.
See if you can get this stylesheet working: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates> <xsl:with-param name="path2folder">/root/pictures/friends</xsl:with-param> </xsl:apply-templates> </xsl:template>
<xsl:template match="node()"> <xsl:param name="path2folder"/> <xsl:param name="good" select="true()"/> <xsl:variable name="path" select="substring-before($path2folder,'/')"/> <xsl:variable name="verygood" select="($good and @name=$path) or self::myxmlfile"/> <xsl:variable name="pathafter" select="substring-after($path2folder,'/')"/> <xsl:variable name="nextpath" select="substring-before($pathafter,'/')"/> <xsl:variable name="folder" select="folder[@name=$nextpath][$good]"/> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates select="node()"> <xsl:with-param name="path2folder" select="$pathafter"/> <xsl:with-param name="good" select="$verygood"/> </xsl:apply-templates> <xsl:if test="$verygood and not($folder) and not($path2folder='')"> <xsl:call-template name="createFolder"> <xsl:with-param name="path2folder" select="$pathafter"/> </xsl:call-template> </xsl:if> </xsl:copy> </xsl:template>
<xsl:template name="createFolder">
<xsl:param name="path2folder"/>
<folder name="{substring-before(concat($path2folder,'/'),'/')}">
<xsl:if test="contains($path2folder,'/')">
<xsl:call-template name="createFolder">
<xsl:with-param name="path2folder"
select="substring-after($path2folder,'/')"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="not(contains($path2folder,'/'))">
<xsl:comment>folder inserted</xsl:comment>
</xsl:if>
</folder>
</xsl:template>regards, -- Joris Gillis (http://users.telenet.be/root-jg/me.html) Don't send spam. I don't like it and it is illegal.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Adding elements to unknow, Gustave Stresen-Reut | Thread | Re: [xsl] Adding elements to unknow, Gustave Stresen-Reut |
| Re: [xsl] XSLT function optimizatio, Christopher R. Maden | Date | RE: [xsl] XSLT function optimizatio, cknell |
| Month |