|
Subject: Re: [xsl] Value of variable not appearing in the <xsl:otherwise> of xml:choose From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 22 Sep 2021 17:06:26 -0000 |
Hi,
Another optimization to consider is to group using
group-adjacent="@class='analyze_visual'" returning a Boolean grouping key,
and groups that are nicely split.
Then part/@num should collapse into '{position()}' and things get simpler.
Also gracefully handles the case of multiple splits.
Cheers, Wendell
On Tue, Sep 21, 2021 at 10:19 PM Dimitre Novatchev dnovatchev@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> 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.
>
>
>
--
...Wendell Piez... ...wendell -at- nist -dot- gov...
...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Value of variable not app, Dimitre Novatchev dn | Thread | Re: [xsl] Value of variable not app, Graydon graydon@xxxx |
| Re: [xsl] Namespaces in output, Michael Kay mike@xxx | Date | Re: [xsl] Value of variable not app, Graydon graydon@xxxx |
| Month |