[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi all, I'm new to this list.
The attributes are more or less arbitrary, might also be other attributes on this element, like 'u'.
For now, let's suppose that all available attributes have equivalent HTML elements (<b>, <i>, <u>).
I want to transform this into something more XHTML-like, so that the above fragment should be represented by
<i><b>Lorem ipsum dolor sit amet</b></i>
The first template matches the TEXT element ok, and then applies the second template to its first attribute. This works fine.
The purpose of the second template is to create an element with the same name as the matching attribute. The result is captured in $newcontent.
Then we should look for other attributes on the same parent element, and apply templates to those as well.
The problem is that <xsl:when test="preceding-sibling::node()"> apparently never returns true. The same goes for <xsl:apply-templates select="preceding-sibling::node()[1]"> which seems to select nothing.
Anyone?
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
[xsl] following-sibling on attributes
Subject: [xsl] following-sibling on attributes From: "Vidar S. Ramdal" <vidar@xxxxxxxx> Date: Fri, 05 Sep 2003 13:08:51 +0200 |
Hi all, I'm new to this list.
I have an XML fragment like this: <TEXT i="1" b="1">Lorem ipsum dolor sit amet</TEXT>
The attributes are more or less arbitrary, might also be other attributes on this element, like 'u'.
For now, let's suppose that all available attributes have equivalent HTML elements (<b>, <i>, <u>).
I want to transform this into something more XHTML-like, so that the above fragment should be represented by
<i><b>Lorem ipsum dolor sit amet</b></i>
I have started off with this XSLT: <!-- Matches any TEXT that has one or more attributes --> <xsl:template match="TEXT[attribute::node()]"> <xsl:apply-templates select="attribute::node()[1]"> <xsl:with-param name="content" select="text()"/> </xsl:apply-templates> </xsl:template>
<!-- Recursive template that deals with attribute nodes --> <xsl:template match="TEXT/attribute::node()"> <xsl:param name="content"/> <xsl:variable name="newcontent"> <xsl:element name="{local-name(.)}"> <xsl:copy-of select="$content"/> </xsl:element> </xsl:variable> <xsl:choose> <!-- Problem: This is never true --> <xsl:when test="preceding-sibling::node()"> <xsl:apply-templates select="preceding-sibling::node()[1]"> <xsl:with-param name="content" select="$newcontent"/> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <xsl:copy-of select="$newcontent"/> </xsl:otherwise> </xsl:choose> </xsl:template>
The first template matches the TEXT element ok, and then applies the second template to its first attribute. This works fine.
The purpose of the second template is to create an element with the same name as the matching attribute. The result is captured in $newcontent.
Then we should look for other attributes on the same parent element, and apply templates to those as well.
The problem is that <xsl:when test="preceding-sibling::node()"> apparently never returns true. The same goes for <xsl:apply-templates select="preceding-sibling::node()[1]"> which seems to select nothing.
The result I get with the above XML and stylesheet is <b>Lorem ipsum dolor sit amet</b> while I want <i><b>Lorem ipsum dolor sit amet</b></i>
Anyone?
-- Vidar S. Ramdal <vidar@xxxxxxxx> Idium AS - http://www.idium.no Tlf. +47 22 00 84 31 / Fax: +47 22 00 84 01 A: Top posting. Q: What is the most annoying thing on usenet and in e-mail?
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XMLSS XSL question, Emmanuil Batsis (Man | Thread | RE: [xsl] following-sibling on attr, Michael Kay |
RE: [xsl] Landscape print control, Andrew Welch | Date | Re: [xsl] following-sibling on attr, Dimitre Novatchev |
Month |
Keywords