[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Finding the closest preceding element within the containing block


Subject: Re: [xsl] Finding the closest preceding element within the containing block
From: ihe onwuka <ihe.onwuka@xxxxxxxxxxxxxx>
Date: Fri, 18 May 2012 20:49:29 +0100

This helped me alot when I was learning xpath.

http://zvon.org/xxl/XPathTutorial/General/examples.html



On Fri, May 18, 2012 at 8:34 PM,  <mlcook@xxxxxxxxxx> wrote:
> Assume a document structure like the one below.
>
> The "c" and "d" elements are at the same level inside of "b" which is inside
of "a".
>
> Currently, I can find the first "c" in the "b" that encloses "d".
>
> But that is too far away.
>
> I want to find the closest preceding "c" within the surrounding "b" when
processing the template for element "d".
>
> When executing the template for "d", my current path attempt is
> (ancestor::a[1]//c)[1]
>
> But, if there is no preceding "c" in the "b" element, I'd like to detect
that, and not find a "c" in any other "b".
>
> If I use just "preceding::c", I might find a "c" in some other "b", which I
don't want.
>
> Thanks for any suggestions.
>
> --Mike
>
>
> <a>
>   ...
>   other elements
>   ...
> </a>
> <a>
>   ...
>   other elements
>   ...
> </a>
> <a>
>   <b>
>   ...
>   </b>
>   ...
>   <b>
>      ...
>      <c/>   <---- My path gets this "c"
>      ...
>      <c/>
>      ...
>      <c/>   <---- I want this "c" when processing "d"
>      ...
>      <d/>
>      ...
>      <c/>
>      ...
>   </b>
>   ...
>   <b>
>   ...
>   </b>
> </a>
> <a>
>   ...
>   other elements
>   ...
> </a>
> ...
>
>
> This email and any attachments are only for use by the intended recipient(s)
and may contain legally privileged, confidential, proprietary or otherwise
private information.  Any unauthorized use, reproduction, dissemination,
distribution or other disclosure of the contents of this e-mail or its
attachments is strictly prohibited.  If you have received this email in error,
please notify the sender immediately and delete the original.


Current Thread