Subject: Re: [xsl] block selection question (XSLT 1.0) From: Brandon Ibach <brandon.ibach@xxxxxxxxxxxxxxxxxxx> Date: Fri, 6 May 2011 05:43:23 -0400 |
You could frame it as follows: For each <line> containing "A", output the line and following siblings having the same number of following siblings containing "B". <xsl:for-each select="/lines/line[contains(., 'A')]"> <xsl:variable name="b-count" select="count(following-sibling::*[contains(., 'B')])"/> <xsl:copy-of select="."/> <xsl:copy-of select="following-sibling::*[count(following-sibling::*[contains(., 'B')]) = $b-count]"/> </xsl:for-each> -Brandon :) On Fri, May 6, 2011 at 5:13 AM, Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx> wrote: > Hello, > > I know that this is basic but I cannot get it done correctly. > > Input: > <lines> > <line></line> > <line>A1</line> > <line>1</line> > <line>B1</line> > <line></line> > <line>A2</line> > <line>2</line> > <line>2</line> > <line>2</line> > <line>B2</line> > <line></line> > <line></line> > </lines> > > Intended output (blockwise, start at A, all including next B): > <line>A1</line> > <line>1</line> > > <line>A2</line> > <line>2</line> > <line>2</line> > <line>2</line> > > > This > <xsl:for-each select="/lines/line[contains(.,'A')]"> > <xsl:copy-of select="."/> > </xsl:for-each> > gives > <line>A1</line> > <line>A2</line> > > And this output is too much (double output of 2nd block) > $ xsltproc y.xsl lines.xml | tidy -q -xml > <line>A1</line> > <line>1</line> > <line /> > <line>A2</line> > <line>2</line> > <line>2</line> > <line>2</line> > <line /> > <line /> > <line>A2</line> > <line>2</line> > <line>2</line> > <line>2</line> > <line /> > <line /> > > $ cat y.xsl > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >> > <xsl:output omit-xml-declaration="yes"/> > > <xsl:template match="/"> > <xsl:for-each select="/lines/line[contains(.,'A')]"> > <xsl:copy-of select="."/> > <xsl:copy-of select="following-sibling::*[not(contains(.,'B'))]"/> > </xsl:for-each> > </xsl:template> > > </xsl:stylesheet> > $ > > I tried making use of "preceding-sibling::*" at different places without > success sofar. > Any help is appreciated. > > > Mit besten Gruessen / Best wishes, > > Hermann Stamm-Wilbrandt > Developer, XML Compiler, L3 > Fixpack team lead > WebSphere DataPower SOA Appliances > https://www.ibm.com/developerworks/mydeveloperworks/blogs/HermannSW/ > ---------------------------------------------------------------------- > IBM Deutschland Research & Development GmbH > Vorsitzender des Aufsichtsrats: Martin Jetter > Geschaeftsfuehrung: Dirk Wittkopp > Sitz der Gesellschaft: Boeblingen > Registergericht: Amtsgericht Stuttgart, HRB 243294
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] block selection question , Mukul Gandhi | Thread | Re: [xsl] block selection question , Martin Honnen |
Re: [xsl] block selection question , Mukul Gandhi | Date | Re: [xsl] block selection question , Martin Honnen |
Month |