[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: (consistency in select results?) converting attrib
Hi Edward, > Thanks for your help this is mostly what I was looking for but I was > hoping to do it in a way that used Template matches for the nodes > for the following reasons. OK. You still have to use a parameter to pass the attributes through from template to template. But you can change the createTag template into a template that matches attributes, as follows: <xsl:template match="@*"> <xsl:param name="attributes" select="../@*[position() > 1]" /> <tag name="{name()}" value="{.}"> <xsl:choose> <xsl:when test="$attributes"> <!-- if there are more attributes, apply templates to them to create the tag element's content --> <xsl:apply-templates select="$attributes[1]"> <xsl:with-param name="attributes" select="$attributes[position() > 1]" /> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <!-- if there aren't any more attributes, apply templates to the content of the current attribute's parent element --> <xsl:apply-templates select="../*" /> </xsl:otherwise> </xsl:choose> </tag> </xsl:template> Then for those attributes for which you need to create an element named after the attribute, you can do something like: <xsl:template match="@attrib1"> <xsl:param name="attributes" select="../@*[position() > 1]" /> <attrib1 value="{.}"> <xsl:choose> <xsl:when test="$attributes"> <xsl:apply-templates select="$attributes[1]"> <xsl:with-param name="attributes" select="$attributes[position() > 1]" /> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="../TagB" /> </xsl:otherwise> </xsl:choose> </attrib1> </xsl:template> Since the content of the two templates (and any more that you create) are similar, you could make a separate named template to handle creating the content of the elements. For the tagA element, you need something like: <xsl:template match="tagA"> <xsl:apply-templates select="@*[1]" /> </xsl:template> For the TagB element, it would be: <xsl:template match="TagB"> <TagB> <xsl:apply-templates select="@*[1]" /> </TagB> </xsl:template> I hope that's closer to what you were after. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|