Re: [xsl] Need an XPath expression for: $B is not contained in $A

Subject: Re: [xsl] Need an XPath expression for: $B is not contained in $A
From: "Eliot Kimber ekimber@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 14 Jun 2018 13:22:48 -0000
This seems to work:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:xs="http://www.w3.org/2001/XMLSchema";
  exclude-result-prefixes="xs"
  version="2.0">
  <xsl:template match="/">
    <xsl:variable name="doc" as="document-node()">
      <xsl:document>
      <root>
        <a>
          <c>
            <b>This is b 1</b>
          </c>
          <d>This is d</d>
        </a>
        <f>
          <c>
            <b>This is b 2</b>
          </c>
        </f>
      </root>
      </xsl:document>
    </xsl:variable>

    <xsl:variable name="A" as="element()" select="$doc/*/a"/>
    <xsl:variable name="B1" as="element()" select="$doc/*/a/c/b"/>
    <xsl:variable name="B2" as="element()" select="$doc/*/f/c/b"/>
    <result>
      <test>b1 in A: <xsl:value-of select="$B1/ancestor::* = $A"/></test>
      <test>b2 in A: <xsl:value-of select="$B2/ancestor::* = $A"/></test>
    </result>
  </xsl:template>
</xsl:stylesheet>

Produces:

<result>
<test>b1 in A: true</test>
<test>b2 in A: false</test>
</result>

Cheers,

E.
--
Eliot Kimber
http://contrext.com


o;?On 6/14/18, 7:22 AM, "Costello, Roger L. costello@xxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

    Hi Folks,

    The variable $A contains an element.

    The variable $B contains an element.

    I need an XPath expression that determines if $B is not contained in $A.

    This XPath expression seems to work:

        not(index-of($B/ancestor::*,$A))

    but that seems awful, i.e., not straightforward, convoluted, and probably
inefficient.

    Is there a better (simpler, straightforward, efficient) XPath expression?

    /Roger

Current Thread