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
|