Re: [xsl] Need XPath 2.0 expression which returns a non-empty paragraph element that is preceded by a long uninterrupted series of empty paragraph elements

Subject: Re: [xsl] Need XPath 2.0 expression which returns a non-empty paragraph element that is preceded by a long uninterrupted series of empty paragraph elements
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 25 Nov 2019 20:07:54 -0000
One solution (not optimized for speed or brevity:

/*/p
        [normalize-space(translate(., ' &#xA0;', ''))
        and
         (every $i in 1 to 20
            satisfies
               preceding-sibling::p[position() eq $i and
not(normalize-space(translate(., ' &#xA0;', '')))]
          )
         ]

On Mon, Nov 25, 2019 at 11:38 AM Costello, Roger L. costello@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Hi Folks,
>
> I want to know if an XHTML document contains a non-empty paragraph (p)
> element that is preceded by a long, uninterrupted series of paragraph
> elements, each containing just a non-blocking space character (decimal
> 160). Let's assume that "long" means 20. For example, here is an excerpt of
> an XHTML document:
>
> <body>
>     <p>Text at top</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>Text at bottom</p>
> </body>
>
> The query should return this:
>
> <p>Text at bottom</p>
>
> because it is preceded by a long, uninterrupted series of paragraph
> elements, each containing just a non-blocking space character.
>
> Here's a query that returns the desired paragraph element:
>
> //p[string-length(.) gt 1][count(preceding-sibling::p[. eq '&#160;']) ge
> 20]
>
> However, if I insert a non-empty paragraph element in the middle of that
> long series:
>
> <body>
>     <p>Text at top</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>Other text</p>  <------------
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>&#160;</p>
>     <p>Text at bottom</p>
> </body>
>
> then my query erroneously returns the same paragraph element. That is, my
> XPath query does not account for the requirement that the long series of
> paragraph elements be uninterrupted. How to write an XPath 2.0 query for
> this?
>
> /Roger
> 
>


-- 
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
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they write
all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread