Re: [xsl] Matching only text nodes with certain (complicated) properties

Subject: Re: [xsl] Matching only text nodes with certain (complicated) properties
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 09 Jan 2009 12:28:49 -0500

At 12:18 PM 1/9/2009, Martin wrote:
Martin Honnen wrote:
David B?rgin wrote:

In one template of my XSL stylesheet I'd like to match a text node with certain properties. Namely, the template should match for any text node where the nearest preceding non-empty text node is farther away than (= comes before) the nearest preceding <pb/> (page-break milestone element).
   match="text()[preceding::text()[1] >> preceding::pb[1]]">

I think you want << instead of >>: <xsl:template match="text()[preceding::text()[1] << preceding::pb[1]]">

This will work in XSLT 2.0, although it sounds like you also want

text()[preceding::text()[normalize-space()][1] << preceding::pb[1]]

... which makes sure that whitespace-only text nodes won't be considered in the test.

In XSLT 1.0 the problem is nastier and expensive, although doable. But when restricted to 1.0, one should keep in mind other options (such as judicious pre-processing) to alleviate problems either with performance or code complexity.

It's doable because the pb can in fact be found on preceding:: (even when not on preceding-sibling::).


Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.      
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
  Mulberry Technologies: A Consultancy Specializing in SGML and XML

Current Thread