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

Subject: [xsl] Finding the closest preceding element within the containing block
From: <mlcook@xxxxxxxxxx>
Date: Fri, 18 May 2012 15:34:24 -0400
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