Re: [xsl] Inserting a parent node.

Subject: Re: [xsl] Inserting a parent node.
From: Morten Primdahl <morten@xxxxxxx>
Date: Mon, 20 May 2002 00:20:06 +0200
Chuck White wrote:
It sounds like you want access to other nodes in the tree brought in via the
document function, which of course is possible. Check out the FAQ for this
at:

http://www.dpawson.co.uk/xsl/sect2/N2602.html

Seemed from the FAQ that the union operator was what I needed, but when I apply that, I get an infinite loop.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<!-- Output parameters -->
<xsl:output encoding="iso-8859-1"/>
<xsl:output omit-xml-declaration="yes"/>
<xsl:output method="text"/>

<xsl:template match="/">
  <xsl:apply-templates select="group"/>
</xsl:template>

<xsl:template match="group">
  <xsl:apply-templates select="member|person"/>
</xsl:template>

<!-- I expected the select="parent::node() | $content/*"
     to return what corresponds to
     <group><person>Bub</person></group> so the person
     match would have parent::group resolve to true -->
<xsl:template match="member">
  <xsl:variable name="content" select="document(@url)"/>
  <xsl:text> Inifinite loop </xsl:text>
  <xsl:apply-templates select="parent::node() | $content/*"/>
</xsl:template>

<xsl:template match="person">
  <xsl:choose>
    <xsl:when test="parent::group">
      <xsl:text>Yep</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>Bummer</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

input.xml
<group>
  <member url="other.xml"/>
</group>

other.xml
<person>Bub</person>

I think I can solve this with some parameters here and there, eg.
by passing the parent node of the member element as parameter
to the subsequent <apply-templates select="$content/*"/>. Just
wondering if that is the appropriate way.

Morten



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


Current Thread