Subject: Re: [xsl] preceding-sibling in a group From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 21 May 2021 07:45:59 -0000 |
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] preceding-sibling in a gr, Martin Honnen martin | Thread | [xsl] Transform selected attribute , Sam Spade anonymousj |
Re: [xsl] preceding-sibling in a gr, Martin Honnen martin | Date | [xsl] Transform selected attribute , Sam Spade anonymousj |
Month |