[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: preceding-sibling in a group

Subject: Re: preceding-sibling in a group
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 21 May 2021 07:45:59 -0000
Re:  preceding-sibling in a group
Martin's suggestions would both work. Another idea would be

<xsl:variable name="first-note"
select="current-group/PART_DES[matches(.,'NOTE')][1]
>
> <xsl:for-each select="current-group()">
>                 <xsl:choose>
>                     <xsl:when test=". is $first-note or . >> $first-note">
>                         <note>
...

Michael Kay
Saxonica

> On 20 May 2021, at 21:20, rick@xxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Here is my sample input:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <dataroot>
>     <DH675AU>
>         <FIG_NO>99999</FIG_NO>
>         <PART_DES>DIPSTICK</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>99999</FIG_NO>
>         <PART_DES>O-RING</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>99999</FIG_NO>
>         <PART_DES>SCREW, SELF-TAPPING</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>99999</FIG_NO>
>         <PART_DES>NOTE: (1) NOT SERVICED SEPARATELY. INCLUDED IN</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>99999</FIG_NO>
>         <PART_DES>58F-98-40740 SEAL KIT.</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>69500</FIG_NO>
>         <PART_DES>DIPSTICK</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>69500</FIG_NO>
>         <PART_DES>O-RING</PART_DES>
>     </DH675AU>
>     <DH675AU>
>         <FIG_NO>69500</FIG_NO>
>         <PART_DES>SCREW, SELF-TAPPING</PART_DES>
>     </DH675AU>
> </dataroot>
>
> Here is my desired output:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
>    <entry>
>       <figure>99999</figure>
>       <description>DIPSTICK</description>
>       <description>O-RING</description>
>       <description>SCREW, SELF-TAPPING</description>
>       <note>NOTE: (1) NOT SERVICED SEPARATELY. INCLUDED IN</note>
>       <note>58F-98-40740 SEAL KIT.</note>
>    </entry>
>    <entry>
>       <figure>69500</figure>
>       <description>DIPSTICK</description>
>       <description>O-RING</description>
>       <description>SCREW, SELF-TAPPING</description>
>    </entry>
> </root>
>
> Here is my stylesheet:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform
<http://www.w3.org/1999/XSL/Transform>"
>     xmlns:xs="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema>"
>     xmlns:math="http://www.w3.org/2005/xpath-functions/math
<http://www.w3.org/2005/xpath-functions/math>"
>     exclude-result-prefixes="xs math"
>     version="3.0" expand-text="true">
>
>     <xsl:output method="xml" indent="yes"/>
>
>     <xsl:template match="/dataroot">
>         <root>
>             <xsl:call-template name="make-components"/>
>         </root>
>     </xsl:template>
>
>     <xsl:template name="make-components">
>         <xsl:for-each-group select="*" group-by="child::FIG_NO">
>             <xsl:call-template name="make-entries"/>
>         </xsl:for-each-group>
>     </xsl:template>
>
>     <xsl:template name="make-entries">
>         <entry>
>             <figure><xsl:apply-templates
select="current-group()[1]/FIG_NO"/></figure>
>             <xsl:for-each select="current-group()">
>                 <xsl:choose>
>                     <xsl:when test="PART_DES[matches(.,'NOTE')] or
preceding::PART_DES[matches(.,'NOTE')]">
>                         <note>
>                             <xsl:apply-templates select="PART_DES"/>
>                         </note>
>                     </xsl:when>
>                     <xsl:otherwise>
>                         <description>
>                             <xsl:apply-templates select="PART_DES"/>
>                         </description>
>                     </xsl:otherwise>
>                 </xsl:choose>
>             </xsl:for-each>
>         </entry>
>     </xsl:template>
>
> </xsl:stylesheet>
>
> Here is what I am getting:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
>    <entry>
>       <figure>99999</figure>
>       <description>DIPSTICK</description>
>       <description>O-RING</description>
>       <description>SCREW, SELF-TAPPING</description>
>       <note>NOTE: (1) NOT SERVICED SEPARATELY. INCLUDED IN</note>
>       <note>58F-98-40740 SEAL KIT.</note>
>    </entry>
>    <entry>
>       <figure>69500</figure>
>       <note>DIPSTICK</note>
>       <note>O-RING</note>
>       <note>SCREW, SELF-TAPPING</note>
>    </entry>
> </root>
>
> The idea is that when I see a bNOTEb string, I want that entry and all
following within the same group to be <note> elements. So I am look for
preceding-sibling or self that contains bNOTEb but restricted to the same
group. I am using XSLT 3. Thank you very much.
>
> Rick
>
> Rick Quatro
> Carmen Publishing Inc.
> 585-729-6746
> rick@xxxxxxxxxxxxxxx <mailto:rick@xxxxxxxxxxxxxxx>
> http://www.frameexpert.com/store <http://www.frameexpert.com/store>
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/612310> (by
email <applewebdata://E82B001C-7C55-4AE4-9E27-67B33E3B9491>)
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
email <>)

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.