Subject: Re: [xsl] Value of variable not appearing in the <xsl:otherwise> of xml:choose From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 22 Sep 2021 02:19:21 -0000 |
Just replace the variable definition with this: <xsl:variable name="part3ID"> <xsl:sequence select= "string( (current-group()[self::div[@class='analyze_visual']], preceding-sibling::div[@class='analyze_visual'][1] )[1]/@nextExposID )"/> </xsl:variable> The complete transformation becomes: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="div"> <xsl:variable name="exploreExposID"> <xsl:value-of select="@id"/> </xsl:variable> <div> <xsl:copy-of select="@*"/> <xsl:for-each-group select="*" group-ending-with="div[@class='analyze_visual']"> <xsl:variable name="part3ID"> <xsl:sequence select= "string( (current-group()[self::div[@class='analyze_visual']], preceding-sibling::div[@class='analyze_visual'][1] )[1]/@nextExposID )"/> </xsl:variable> <xsl:choose> <xsl:when test="current-group()[self::div[@class='analyze_visual']]"> <part num="1" globalNumn="{$exploreExposID}"> <xsl:copy-of select="current-group()[not(self::div[@class='analyze_visual'])][not(self::h9 )]"/> </part> <part num="2" globalNum="{$part3ID}"> <xsl:copy-of select="current-group()[self::div[@class='analyze_visual']]"></xsl:copy-of> </part> </xsl:when> <xsl:otherwise> <part num="3"> <xsl:attribute name="globalNum"> <xsl:value-of select="$part3ID"/> </xsl:attribute> <xsl:copy-of select="current-group()"/> </part> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </div> </xsl:template> </xsl:stylesheet> And when applied on the provided XML document: <div id="584175"> <p>1.2 Modes</p> <p>Some content</p> <div class="analyze_visual" lookup="2.1.2.2" av_itemIDnum="584177" nextExposID="584176"> <p>Analyzing the Visual</p> <div class="av" type="analyze"> <img alt="" src="http://assets.xxx.com/xxx.png"/> <p class="caption">Figure 2-2</p> </div> </div> <p>Ethics</p> <p>More content</p> </div> The wanted result is produced: <div id="584175"> <part num="1" globalNumn="584175"> <p>1.2 Modes</p> <p>Some content</p> </part> <part num="2" globalNum="584176"> <div class="analyze_visual" lookup="2.1.2.2" av_itemIDnum="584177" nextExposID="584176"> <p>Analyzing the Visual</p> <div class="av" type="analyze"> <img alt="" src="http://assets.xxx.com/xxx.png"/> <p class="caption">Figure 2-2</p> </div> </div> </part> <part num="3" globalNum="584176"> <p>Ethics</p> <p>More content</p> </part> </div> Cheers, Dimitre On Tue, Sep 21, 2021 at 10:11 AM Terry Ofner tdofner@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > I have this xml input: > > <div id="584175"> > <p>1.2 Modes</p> > <p>Some content</p> > <div class="analyze_visual" lookup="2.1.2.2" av_itemIDnum="584177" nextExposID="584176"> > <p>Analyzing the Visual</p> > <div class="av" type="analyze"> > <img alt="" src="http://assets.xxx.com/xxx.png"/> > <p class="caption">Figure 2-2</p> > </div> > </div> > <p>Ethics</p> > <p>More content</p> > </div> > > > I need to divide it into three parts with any <div class=banalyze_visualb> as the trigger: > > <div id="584175b> > > <part num=b1b globalNum=b584175"> > <p>1.2 Modes</p> > <p>Some content</p> > </part> > > <part num="2"> > <div class="analyze_visual" lookup="2.1.2.2" av_itemIDnum="584177" nextExposID="584176"> > <p>Analyzing the Visual</p> > <div class="av" type="analyze"> > <img alt="" src="http://assets.xxx.com/xxx.png"/> > <p class="caption">Figure 2-2</p> > </div> > </div> > </part> > > <part num="3" globalNum="584176"> > <p>Ethics</p> > <p>more content</p> > </part> > > </div> > > > I am using for-each-group() group-ending-with=bdiv[@class=banalyze_visualb] to accomplish the creation of the parts. > The Issue: I am having trouble transferring the attribute nextExposID into the third part. Here is the stylesheet: > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:math="http://www.w3.org/2005/xpath-functions/math" > exclude-result-prefixes="xs math" > version="3.0"> > > <xsl:template match="div"> > <xsl:variable name="exploreExposID"> > <xsl:value-of select="@id"/> > </xsl:variable> > <div> > <xsl:copy-of select="@*"/> > <xsl:for-each-group select="*" group-ending-with="div[@class='analyze_visual']"> > <xsl:variable name="part3ID"> > <xsl:value-of select="current-group()[self::div[@class='analyze_visual']]/@nextExposID"></x sl:value-of> > </xsl:variable> > <xsl:choose> > <xsl:when test="current-group()[self::div[@class='analyze_visual']]"> > <part num="1" globalNumn="{$exploreExposID}"> > <xsl:copy-of select="current-group()[not(self::div[@class='analyze_visual'])][not(self::h9 )]"/> > </part> > <part num="2" globalNum="{$part3ID}"> > <xsl:copy-of select="current-group()[self::div[@class='analyze_visual']]"></xsl:copy-of> > </part> > </xsl:when> > <xsl:otherwise> > <part num="3"> > <xsl:attribute name=bglobalNum"> > <xsl:value-of select="$part3ID"/> > </xsl:attribute> > <xsl:copy-of select="current-group()"/> > </part> > </xsl:otherwise> > </xsl:choose> > </xsl:for-each-group> > </div> > </xsl:template> > > </xsl:stylesheet> > > > Notice in the result below that the variable part3ID appears in part 2 just fine, but it doesnbt display in part 3. I suspect this is due to the <otherwise> of the xsl:choose. This seems strange to me, since I have declared the variable outside the xsl:choose. > > My questions > Is there a way to pass that variable to part 3? > Or, is there a better way to create the parts I need? > > (I know that my numbering of the parts is clunky. I will address the numbering to accommodate situations with more than one <div> after I solve this issue.) > > Output modified slightly with returns to improve readability. > > <div id="584175b> > > <part num="1" globalNumn="584175"> > <p>1.2 Modes</p> > <p>Some content</p> > </part> > > <part num="2" globalNum="584176"> > <div class="analyze_visual" > lookup="2.1.2.2" > av_itemIDnum="584177" > nextExposID="584176"> > <p>Analyzing the Visual</p> > <div class="av" type="analyze"> > <img alt="" src="http://assets.xxx.com/xxx.png"/> > <p class="caption">Figure 2-2</p> > </div> > </div> > </part> > > <part num="3" globalNum=""> > <p>Ethics</p> > <p>More content</p> > </part> > > </div> > > > > XSL-List info and archive > EasyUnsubscribe (by email) -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- To achieve the impossible dream, try going to sleep. ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- Typing monkeys will write all Shakespeare's works in 200yrs.Will they write all patents, too? :) ------------------------------------- Sanity is madness put to good use. ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Value of variable not app, Liam R. E. Quin liam | Thread | Re: [xsl] Value of variable not app, Wendell Piez wapiez@ |
Re: [xsl] Value of variable not app, Liam R. E. Quin liam | Date | [xsl] Namespaces in output, Terry Ofner tdofner@ |
Month |