xsl-list
[Top] [All Lists]

RE: How to find all parents having the same child?

2003-06-18 01:12:15
Hi,

Here an example:

<Quries>
 <Query name="query1">
   <Query name="query2">
     <Table name="table1"/>
     <Table name="table2"/>
     <Query name="query3">
       <Table name="table3"/>
     </Query>
   </Query> 
 </Query>
 <Query name="query4">
   <Table name="table1"/>
   <Table name="table2"/>
   <Table name="table3"/>
 </Query> 
</Queries>

Given that, I would like to extract all parents for
each leaf like the following:

table3: query4, query3
table1: query4, query1

did you mean

  table1: query4, query2

as query1 is not a direct parent of table1.

query3: query2
query2: query1

An example from you on how to get that cross-reference
list would help me a lot.

Hopefully this will get you started.

  <xsl:key name="x" match="Table | Query" use="@name"/>
  <xsl:output method="text"/>
  <xsl:template match="Queries">
    <xsl:for-each select="descendant::*[generate-id(.) = generate-id(key('x', 
@name))]">
      <xsl:if test="key('x', @name)[parent::Query]">
        <xsl:value-of select="@name"/>: <xsl:text/>
        <xsl:for-each select="key('x', @name)">
          <xsl:if test="not(position() = 1)">, </xsl:if>
          <xsl:value-of select="../@name"/>
        </xsl:for-each>
        <xsl:text>&#xA;</xsl:text>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

Cheers,

Jarno - Chris C: Vengeance Is Mine

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list