Subject: Re: [xsl] Matching only text nodes with certain (complicated) properties From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx> Date: Fri, 9 Jan 2009 10:08:29 -0800 |
> 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::). As the OP stated in his opening message, "As far as I understand it, the main problem is that the expression I have to construct for matching can't rely simply on the preceding:: or ancestor:: axes since the <pb/> can really appear anywhere in the tree." The following XSLT 1.0 transformation has a template that correctly matches (only) the required text nodes: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:template match="text()"/> <xsl:template match= "text() [count(preceding::text()[1]/preceding::node() | preceding::text()[1]/ancestor::node() ) < count((preceding::pb[1] | ancestor::pb[1])[last()]/preceding::node() | (preceding::pb[1] | ancestor::pb[1])[last()]/ancestor::node() ) ] " > ***Matching*** '<xsl:value-of select="."/>' </xsl:template> </xsl:stylesheet> When applied on this xml document: <t> <item> before before <pb n="3"/> before a vowel. <pb n="26"> <list> <item n="a">The <mentioned>thingy</mentioned> </item> </list> </pb> </item> </t> it correctly produces: ***Matching*** ' before a vowel. ' ***Matching*** 'The ' -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play On Fri, Jan 9, 2009 at 9:28 AM, Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote: > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Matching only text nodes , David Carlisle | Thread | Re: [xsl] Matching only text nodes , Wendell Piez |
Re: [xsl] Matching only text nodes , Martin Honnen | Date | Re: [xsl] Matching only text nodes , Wendell Piez |
Month |