[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: block selection question (XSLT 1.0)
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|