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
Hi,

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).
 <xsl:template
   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::).

Cheers,
Wendell



======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
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