Subject: RE: [xsl] detecting text between nodes|
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 24 Feb 2005 17:13:14 -0000
If the context node is a <br/> element, then test="preceding-sibling::node()[self::br]" tests whether the immediately preceding node is also a <br/> element. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Uwe Janner [mailto:xsl@xxxxxxxxx] > Sent: 24 February 2005 16:59 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] detecting text between nodes > > dear xsl-specialists, > > i try write an xsl to transform html-documents (with a restricted > html-subset) directly to fo. > > my only problem is the <br/>-tag: > if i have "aaa<br/>bbb<br/>ccc" > then i simply have to replace each br-tag with a <fo:block/> > just to insert > a line-break. > > but if i have "aaa<br/><br/>bbb" the first br is responsible for the > line-break and the second will insert an empty line, i.e. i > have to convert > the second br-tag to something that inserts an empty line: > "aaa<fo:block/><fo:block space-after="10"/>bbb" > > so, the attribute "space-after=10" is present if the > preceding sibling is a > "br" and there is nothing except whitespace between the > current br and the > preceding br; > > but how can i express this condition with xpath? > > <xsl:template match="br"> > <fo:block> > <xsl:if test="name(./preceding-sibling::*)='br' and > NOTHINGBUTWHITESPACEBETWEEN(.,./preceding-sibling::*)"> > <xsl:attribute name="space-after">10pt</xsl:attribute> > </xsl:if> > </fo:block> > </xsl:template> > > > tia for any hint! > > fusel!