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

Subject: Re: [xsl] XPath expression to check that there are no intervening elements?
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 19 Jul 2016 15:54:54 -0000
Or perhaps

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


Michael Kay


> On 19 Jul 2016, at 16:51, Michael Kay mike@xxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> empty((* except B) [following-sibling::B and preceding-sibling::B])
>
>> On 19 Jul 2016, at 16:44, Costello, Roger L. costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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

Current Thread