xsl-list
[Top] [All Lists]

Re: [xsl] XPath expression to check that there are no intervening elements?

2016-07-19 10:54:58
Or perhaps

empty(B/following-sibling::*[not(self::B)]/following-sibling::B)


Michael Kay


On 19 Jul 2016, at 16:51, Michael Kay mike(_at_)saxonica(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

empty((* except B) [following-sibling::B and preceding-sibling::B])

On 19 Jul 2016, at 16:44, Costello, Roger L. costello(_at_)mitre(_dot_)org 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hi Folks,

This XML has a solid block of <B> elements:

<Document>
  <A/>
  <B/>
  <B/>
</Document>

This XML has an intervening <C> element:

<Document>
  <A/>
  <B/>
  <C/>
  <B/>
</Document>

I need an XPath expression to return a Boolean value:

     Return true if there is one solid block of <B> elements
             (no intervening elements).
     Otherwise, return false.

I created a horrendous XPath expression to solve it:

count(B) eq (B[last()]/count(preceding-sibling::*)+1 - 
B[1]/count(preceding-sibling::*))

Can you provide a better (simpler, more efficient) XPath expression?

/Roger


--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>